مشق List پر مشق

محمداحمد

لائبریرین
Nested List & Indices

وضاحت :

کسی لسٹ کے اندر اگر ایک یا ایک سے زیادہ لسٹ مزید پائی جائیں تو اسے نیسٹڈ لسٹ کہا جاتا ہے۔

Nested List میں بھی اشاریہ کی مدد سے ہم لسٹ کے کسی بھی رکن تک رسائی حاصل کر سکتے ہیں۔ مثلاً ایک لسٹ دیکھیے:

PHP:
>>> t = [['a','b'],['c','d'],['e','f']]
>>> t[0]
['a', 'b']
>>> t[0][1]
'b'
>>> t[2][0]
'e'

یہاں t کو ایک لسٹ تفویض (assign) کی گئی ہے جس میں مزید تین سب لسٹس موجود ہیں۔

اوپر دیکھنے سے پتہ چلتا ہے کہ [0]t سے ہمیں لسٹ کا پہلا رکن جو خود ایک لسٹ ہے حاصل ہوا۔ اب اگر اس سب لسٹ میں سے ہمیں کوئی رکن حاصل کرنا ہو تو ہمیں ایک کے بجائے دو اشاریہ دینے ہوں گے ۔ جس کی مثال اس کے نیچے دیکھی جا سکتی ہے۔ یعنی جب ہم نے پہلے اشاریہ میں 0 اور دوسرے اشاریہ میں 1 دیا تو ہمیں پہلی سب لسٹ کا دوسرا رکن 'b' حاصل ہوا۔

اسی طرح ہم منفی اشاریہ بھی استعمال کرسکتے ہیں۔ منفی اشاریہ کی مثالیں درج ذیل ہیں۔

PHP:
>>> t = [['a','b'],['c','d'],['e','f']]
>>> t[-1]
['e', 'f']
>>> t[-2][-2]
'c'
>>>

مشق:

درج ذیل دو لسٹ دیکھیے۔

PHP:
num = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
members = [['Anees', 'Muhib'], ['Tabeer', 'Sajid'], ['Kashfi', 'Bilal' , 'Nain']]

1.1 مثبت اشاریہ استعمال کرتے ہوئے اظہاریہ (Expression) لکھیے جو :

الف ۔ num والی لسٹ سے 5 ریٹرن کرے۔
ب ۔ num والی لسٹ سے 8 ریٹرن کرے۔
ج- ۔ num والی لسٹ سے 7 ریٹرن کرے۔

1.2 مثبت اشاریہ استعمال کرتے ہوئے اظہاریہ (Expression) لکھیے جو :

الف ۔ members والی لسٹ سے Muhib ریٹرن کرے۔
ب ۔ members والی لسٹ سے Bilal ریٹرن کرے۔
ج- ۔ members والی لسٹ سے Anees ریٹرن کرے۔

1.3 منفی اشاریہ استعمال کرتے ہوئے اظہاریہ (Expression) لکھیے جو :

الف ۔ num والی لسٹ سے 5 ریٹرن کرے۔
ب ۔ num والی لسٹ سے 8 ریٹرن کرے۔
ج- ۔ num والی لسٹ سے 7 ریٹرن کرے۔

1.4 منفی اشاریہ استعمال کرتے ہوئے اظہاریہ (Expression) لکھیے جو :

الف ۔ members والی لسٹ سے Muhib ریٹرن کرے۔
ب ۔ members والی لسٹ سے Bilal ریٹرن کرے۔
ج- ۔ members والی لسٹ سے Anees ریٹرن کرے۔
 

محمداحمد

لائبریرین
درج ذیل فنکشن دیکھیے:
PHP:
def shift_right(L):
    ''' (list) -> NoneType
 
    Shift each item in L one position to the right
    and shift the last item to the first position.
 
    Precondition: len(L) >= 1
    '''
 
    last_item = L[-1]
 
    for i in range(1, len(L)):
        L[len(L) - i] = L[len(L) - i - 1]
 
    L[0] = last_item

فنکشن کا نتیجہ:
PHP:
>>> L = ['a','b','c','d']
>>> shift_right(L)
>>> L
['d', 'a', 'b', 'c']
>>>
>>> T = [1,2,3,4]
>>> shift_right(T)
>>> T
[4, 1, 2, 3]
>>>

فنکشن پر بات کرنے سے پہلے دو اہم باتیں سمجھ لیں۔
1۔ اگر ہم اس کا ٹائپ کونٹریکٹ دیکھیں تو ہمیں پتہ چلے گا کہ یہ فنکشن NoneType ہے۔ اس سے مراد یہ ہے کہ فنکشن دیا گیا پراسس تو رن کرے گا لیکن ریٹرن کچھ نہیں کرے گا۔ یعنی ہمیں NoneType فنکشنز کو استعمال کرتے ہوئے یہ ذہن میں رکھنا چاہیے کہ یہ فنکشن کچھ ریٹرن نہیں کرے گا لیکن فنکشن کے مطابق ڈیٹا میں مطلوبہ تبدیلیاں ضرور رونما ہوں گی۔

2۔ فنکشن کے ڈوک اسٹرنگ میں ایک اصطلاح Pre-Condition کی بھی استعمال ہوئی ہے۔ Pre-Condition سے مراد یہ ہے کہ اس فنکشن کو استعمال کرنے کے لئے ایک بنیادی شرط ہے جس کہ بغیر فنکشن صحیح انداز میں کام نہیں کرے گا۔ اس فنکشن میں شرط یہ ہے کہ لسٹ میں کم سے کم ایک رکن ضرور ہو۔


وضاحت :

اب آجائیے فنکشن کی طرف:

فنکشن shift_right لسٹ میں موجود ہر رکن (Element) کو ایک پوزیشن دائیں جانب منتقل کرتا ہے اور آخری رکن کو پہلی پوزیشن پر منتقل کر دیتا ہے۔

اس فنکشن میں سب سے پہلے ہم نے لسٹ کے آخری رکن (Element) کو ایک ویری ایبل last_item میں محفوظ کر لیا ہے۔ اس کے بعد For Loop اور Range کی مدد سے لسٹ کو پراسس کیا ہے۔

حلقہ (Loop) کے پہلے پھیرے (Iteration) میں i کی قیمت 1 ہوگی (کیونکہ ہم نے Range کے Start آپشن میں 1 کی قدر (value) پاس کی ہے۔)۔ اسطرح پہلے پھیرے میں L[len(L) - i] برابر ہوگا L[3] کے۔ اور L[len(L) - i - 1] برابر ہوگا L[2] کے ۔ یعنی اب ہم نے L[3] (جو کہ لسٹ کا آخری رکن ہے) کو L[2] کی قیمت تفویض (assign) کر دی ہے۔

اس کے بعد ہر پھیرے میں جیسے جیسے i کی قیمت بڑھے گی دیاگیا لوپ ایک نمبر پیچھے آکر لسٹ کو پروسس کرے گا یہاں تک کہ لسٹ کے ارکان (length of list) پورے ہو جائیں گے۔

سب سے آخر میں ہم لسٹ کے پہلے رکن کی جگہ پہلے سے محفوظ کردہ last_item کو تفویض (assign) کروا دیں گے۔

نوٹ: دو چار لسٹ، اس فنکشن کے ذریعے پراسس کرکے دیکھیے سمجھنے میں مدد ملے گی۔

مشق:

2.1 ۔ اسی فنکشن کی طرز پر ایک فنکشن shift_left بنائیے جو لسٹ میں موجود ہر رکن (Element) کو ایک پوزیشن بائیں جانب منتقل کرے اور پہلے رکن کو آخری پوزیشن پر منتقل کر دے۔
 

محمداحمد

لائبریرین
PHP:
def make_pairs(list1, list2):
    ''' (list of str, list of int) -> list of [str, int] list
   
    Return a new list in which each item is a 2-item list with the string from the
    corresponding position of list1 and the int from the corresponding position of list2.
   
    Precondition: len(list1) == len(list2)
   
    >>> make_pairs(['A', 'B', 'C'], [1, 2, 3])
    [['A', 1], ['B', 2], ['C', 3]]
    '''
   
    pairs = []
   
    for i in range(len(list1)):
        pairs.append([list1[i], list2[i]])
       
    return pairs

3.1۔ درج بالا فنکشن کو غور سے دیکھیے اور بتائیے کہ :
الف۔ یہ کیا کام کرتا ہے
ب۔ یہ کیسے کام کرتا ہے۔

مزید یہ کہ اس فنکشن کو ایک فائل میں محفوظ کیجے اور پھر اس فنکشن کی مدد سے کم از کم 2 مثالیں اور ان کے نتائج تحریر فرمائیں۔
 

محمداحمد

لائبریرین
درج ذیل فنکشن کو بغور دیکھیے:

PHP:
def merge(L):
    merged = []
    for i in range(0, len(L), 3):
        merged.append(L[i] + L[i + 1] + L[i + 2])
    return merged

فنکشن کا نتیجہ:
PHP:
>>> print(merge([1, 2, 3, 4, 5, 6, 7, 8, 9]))
[6, 15, 24]

یہ فنکشن ایک نئی لسٹ فراہم کرتا ہے، جس میں آرگیومینٹ میں دی گئی لسٹ کے پہلے، دوسرے اور تیسرے عدد کا حاصل جمع ایک رکن کے طور پر موجود ہوتا ہے ۔ پھر چوتھے نمبر سے چوتھے، پانچویں اور چھٹے عدد کا حاصل جمع بھی اسی طرز پر نئی لسٹ کے ایک رکن کے طور پر فراہم کیا جاتا ہے اور اسی ترتیب سے یہ سلسلہ چلتا رہتا ہے۔ یعنی لسٹ میں ایک ترتیب سے آنے والے پہلے تین اعداد کو جمع کرکے نئی لسٹ میں append کروا دیا جاتا ہے۔ پھر ان تین اعداد کے بعد مزید تین اعداد پر یہی عمل ہوتا ہے یہاں تک کہ لسٹ کے اراکین تمام ہو جائیں۔

4.1۔ اسی طرز پر ایک فنکشن بنائیے جو آرگیومینٹ میں دی گئی لسٹ کے پہلے اور دوسرے عدد کا حاصل ضرب فراہم کرے، پھر تیسرے اور چوتھے کا حاصل ضرب اور اسی تریتب سے لسٹ کے تمام اراکین کا حاصل ضرب ایک نئی لسٹ میں فراہم کرے۔
 

محمداحمد

لائبریرین
5.1 ۔ list کے درج ذیل طریقہ کار میں کیا فرق ہے: ممکن ہو تو مثالوں کی ذریعے سمجھائیں۔

الف ۔ Append اور Insert
ب ۔ Pop اور Remove
ج۔ Reverse اور Sort
 

عائشہ عزیز

لائبریرین
1.2 مثبت اشاریہ استعمال کرتے ہوئے اظہاریہ (Expression) لکھیے جو :

الف ۔ members والی لسٹ سے Muhib ریٹرن کرے۔
ب ۔ members والی لسٹ سے Bilal ریٹرن کرے۔
ج- ۔ members والی لسٹ سے Anees ریٹرن کرے۔

PHP:
>>> members = [['Anees', 'Muhib'], ['Tabeer', 'Sajid'], ['Kashfi', 'Bilal' , 'Nain']]
>>> members[0][1]
'Muhib'
>>> members[2][1]
'Bilal'
>>> members[0][0]
'Anees'
 

عائشہ عزیز

لائبریرین
1.4 منفی اشاریہ استعمال کرتے ہوئے اظہاریہ (Expression) لکھیے جو :

الف ۔ members والی لسٹ سے Muhib ریٹرن کرے۔
ب ۔ members والی لسٹ سے Bilal ریٹرن کرے۔
ج- ۔ members والی لسٹ سے Anees ریٹرن کرے۔

PHP:
>>> members = [['Anees', 'Muhib'], ['Tabeer', 'Sajid'], ['Kashfi', 'Bilal' , 'Nain']]
>>> members[-3][-1]
'Muhib'
>>> members[-1][-2]
'Bilal'
>>> members[-3][-2]
'Anees'
 

عائشہ عزیز

لائبریرین
2.1 ۔ اسی فنکشن کی طرز پر ایک فنکشن shift_left بنائیے جو لسٹ میں موجود ہر رکن (Element) کو ایک پوزیشن بائیں جانب منتقل کرے اور پہلے رکن کو آخری پوزیشن پر منتقل کر دے۔

PHP:
def shift_left(q):
    temp = q[0]
    for i in range(0, len(q)-1, 1):
        q[i] = q[i+1]
    q[-1] = temp
    return q

فنکشن کے نتائج:

PHP:
>>> q = ["A", "B", "C", "D", "E"]
>>> shift_left(q)
['B', 'C', 'D', 'E', 'A']
 

عائشہ عزیز

لائبریرین
PHP:
def make_pairs(list1, list2):
    ''' (list of str, list of int) -> list of [str, int] list
 
    Return a new list in which each item is a 2-item list with the string from the
    corresponding position of list1 and the int from the corresponding position of list2.
 
    Precondition: len(list1) == len(list2)
 
    >>> make_pairs(['A', 'B', 'C'], [1, 2, 3])
    [['A', 1], ['B', 2], ['C', 3]]
    '''
 
    pairs = []
 
    for i in range(len(list1)):
        pairs.append([list1[i], list2[i]])
     
    return pairs

3.1۔ درج بالا فنکشن کو غور سے دیکھیے اور بتائیے کہ :
الف۔ یہ کیا کام کرتا ہے
ب۔ یہ کیسے کام کرتا ہے۔

مزید یہ کہ اس فنکشن کو ایک فائل میں محفوظ کیجے اور پھر اس فنکشن کی مدد سے کم از کم 2 مثالیں اور ان کے نتائج تحریر فرمائیں۔

پروگرام میں ایک فنکشن کو ڈیفائن کیا گیا ہے جو کہ دو پیرامیٹر لسٹ کے طور پر لیتا ہے اور پھر ان کے ایلیمنٹس کو لے کر ایک نئی لسٹ بناتا ہے جس میں مزید اتنی لسٹس ہوتی ہیں جتنے کسی لسٹ کے ایلمنٹس ہیں۔ اور ان لسٹس میں بالترتیب پہلی اور دوسری لسٹ کا ایک ایک رکن ہوتا ہے۔
جبکہ پروگرام کے لیے شرط یہ ہے کہ دونوں لسٹس میں ایلمنٹس کی تعداد برابر ہو۔
فنکشن باڈی میں ہم نے پہلے ایک ویری ایبل pairs کو ایز آ لسٹ لیا اور اس کو بائے ڈیفالٹ خالی رکھا۔
پھر ہم نے فور لوپ کے ذریعے ویری ایبل i کو جو ویلیوز اسائن کرنی ہیں ان کی لمٹ پہلی لسٹ کی لمبائی تک ہوگی (چونکہ دونوں لسٹس کی لمبائی برابر ہے اس لیے یہاں ہم لسٹ نمبر ٹو بھی لے سکتے ہیں)
اب لسٹ میتھڈ append کو استعمال کرتے ہوئے (جس کی مدد سے ہم کسی لسٹ کے آخر میں ایلیمنٹس کا اضافہ کرتے ہیں اور یہ میتھڈ صرف ایک آرگومنٹ لیتا ہے اور چونکہ ہم نے دو دو کے جوڑے بنانے ہیں اس لیے ہم دونوں لسٹس کے ایلیمنٹ کو ایک اور لسٹ میں سیو کر رہے ہیں جو کہ پھر سنگل ہوگی اور میتھڈ کی شرط کو پورا کرے گی۔) اس طرح ہم نے درجہ بدرجہ i ویلیو تبدیل کرتے ہوئے ویری ایبل pairs میں سیو کیا اور پھر اس کو رٹرن کردیا۔
مثال کے طور پر پہلے pairs کی لسٹ خالی ہے۔ اب جیسے ہی پہلے بار لوپ چلا i کی ویلیو لسٹ ون کے مطابق صفر ہوئی اور پھر اس نے نیچے pairs والی لسٹ میں دونوں لسٹس کے صفر والے ایلیمنٹس آئے (چونکہ دونوں لسٹس بھی i کی ویلیوز کے مطابق کام کریں گی۔ اس طرح اگلی بار i کی ویلیو ون ہوگی اور ایک اور جوڑا pairs میں آ جائے گا۔ یہاں تک کہ لسٹ ون کی لمبائی ختم ہو جائے۔

مثالیں اور ان کے نتائج :

PHP:
>>> make_pairs(["A", "B", "C", "D", "E"], ["a", "b", "c", "d", "e"])
[['A', 'a'], ['B', 'b'], ['C', 'c'], ['D', 'd'], ['E', 'e']]

PHP:
>>> make_pairs([1, 2, 3], [11, 22, 33])
[[1, 11], [2, 22], [3, 33]]
 

عائشہ عزیز

لائبریرین
4.1۔ اسی طرز پر ایک فنکشن بنائیے جو آرگیومینٹ میں دی گئی لسٹ کے پہلے اور دوسرے عدد کا حاصل ضرب فراہم کرے، پھر تیسرے اور چوتھے کا حاصل ضرب اور اسی تریتب سے لسٹ کے تمام اراکین کا حاصل ضرب ایک نئی لسٹ میں فراہم کرے۔
PHP:
def merge(L):
    '''Precondition
    len(L) % 2 == 0
    '''
    merged = []
    for i in range(0, len(L)-1, 2):
      merged.append(L[i] * L[i + 1])
    return merged


فنکشن کے نتائج :

PHP:
>>> print(merge([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
[2, 12, 30, 56, 90]
 

عائشہ عزیز

لائبریرین
5.1 ۔ list کے درج ذیل طریقہ کار میں کیا فرق ہے: ممکن ہو تو مثالوں کی ذریعے سمجھائیں۔

الف ۔ Append اور Insert

appendکا طریقہ کسی بھی لسٹ کے آخر میں ایک ایلمنٹ کا اضافہ کرنے کے لیے استعمال کیا جاتا ہے۔ یہ صرف ایک آرگومنٹ لیتا ہے۔
جیسے
PHP:
>>> L = ['a', 'b', 'c', 'd']
>>> L.append('e')
>>> L
['a', 'b', 'c', 'd', 'e']

insert دو آرگومنٹس لیتا ہے پہلے کوئی انڈیکس اور دوسرا جسے کا اضافہ کرنا ہو۔ جیسے کہ دوسری پوزیشن پر ہم نے i کا اضافہ کیا۔

PHP:
>>> V = ['a', 'e', 'o', 'u']
>>> V.insert(2, 'i')
>>> V
['a', 'e', 'i', 'o', 'u']
ان دونوں میتھڈز سے لسٹ کی لمبائی میں اضافہ ہوتا ہے۔ اور انسرٹ والا میتھڈ کسی پوزیشن پر پہلے سے موجود ایلیمنٹ کو ختم کیے بغیر اس پوزیشن پر دوسرا ایلیمنٹ انسرٹ کردیتا ہے۔ اور اس سے اگلے ایلیمنٹس کی پوزیشنز بدل جاتی ہیں۔
 

عائشہ عزیز

لائبریرین
ب۔ Pop اورRemove

یہ دونوں طریقے ایک ایک آرگومنٹ لیتے ہیں۔ remove سے ہم کسی بھی دئیے گئے ایلیمنٹ کو لسٹ سے ختم کرتے ہیں۔
جیسے
PHP:
>>> L = ['a', 'b', 'c', 'd']
>>> L.remove('c')
>>> L
['a', 'b', 'd']

لیکن یہ صرف اس ایلیمنٹ کی فرسٹ اکرینس کو ختم کرے گا۔ مثلا اگر ایک زیادہ بار وہ ایلیمنٹ لسٹ میں رپیٹ ہو رہا ہے تو سب سے پہلی پوزیشن سے ختم کرے گا باقی پوزیشنز پر وہ ایلیمنٹ ایسے ہی رہے گا۔

PHP:
>>> L = ['a', 'c', 'b', 'c', 'd']
>>> L.remove('c')
>>> L
['a', 'b', 'c', 'd']


pop والے طریقے سے کسی دی گئی پوزیشن پر ایلیمنٹ کو ختم کیا جاتا ہے۔
PHP:
>>> L = ['a', 'c', 'b', 'c', 'd']
>>> L.pop(1)
'c'
>>> L
['a', 'b', 'c', 'd']

اس کا آرگومنٹ اختیاری ہوتا ہے اور کوئی بھی آرگومنٹ نہ دینے کی صورت میں یہ لسٹ کے آخری ایلیمنٹ کو ختم کر دیتا ہے۔

PHP:
>>> L = ['a', 'b', 'c', 'd']
>>> L.pop()
'd'
>>> L
['a', 'b', 'c']
>>>
 

عائشہ عزیز

لائبریرین
ج۔ Reverse اور Sort

sort سے کسی بھی لسٹ کے ایلمنٹس کو ترتیب دی جاتی ہے۔ چاہے وہ اسٹرنگز ہوں یا نمبرز۔۔
جیسے
PHP:
>>> L = ['e', 'f', 'a', 'x', 'd', 'l']
>>> L.sort()
>>> L
['a', 'd', 'e', 'f', 'l', 'x']
>>>
>>> N = [2, 5, 1, 6, 7]
>>> N.sort()
>>> N
[1, 2, 5, 6, 7]

جبکہ جیسے کی reverse کے نام سے ظاہر ہے اس طریقے سے ہم دی گئی لسٹ میں موجود ایلیمنٹس کی ترتیب الٹ دیتے ہیں۔ جیسے
PHP:
[PHP]>>> N = [2, 5, 1, 6, 7]
 
>>> N.reverse()
 
>>> N
 
[7, 6, 1, 5, 2]
یہ دونوں طریقے کوئی بھی آرگومنٹ نہیں لیتے۔
 
Top