سبق List Comprehension

Comprehension
جامعیت (comprehension) ایک ترتیب سے ایک نئی ترتیب مرتب کرنے کا طریقہ کار ہے۔ اس کی تین قسمیں ہیں:

لسٹ جامعیت (list comprehension)
ڈکشنری جامعیت (dictionary comprehension)
سیٹ جامعیت (set comprehension)

List Comprehension
لسٹ بنانے کا ایک طریقہ یہ بھی ہے کہ پہلے سے موجود لسٹ سے ایک نئی لسٹ بنا لی جائے۔

ایک لسٹ میں ہمارے پاس پانچ اراکین ہیں

اب ہم ایک اور لسٹ بنانا چاہتے ہیں جس میں پہلے سے موجود لسٹ کے ہر رکن کو دو سے ضرب دی جائے گی۔
PHP:
>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>>  new_list.append(x * 2)


اسی کام کو کرنے کے لیے ہم نے پہلے ایک خالی لسٹ بنائی ہے ۔ اس کے بعد for لوپ کے ذریعے ہر رکن تک پہنچا گیا ہے ۔
نئی لسٹ میں پہلے سے موجود رکن کو دو سے ضرب دے کر شامل کر لیا گیا ہے۔

اب اسی کام کو ہم لسٹ جامعیت (list comprehension) کے ذریعے کرتے ہیں۔
PHP:
>>> list_comp = [ x * 2 for x in my_list ]
>>> list_comp
[2, 4, 6, 8, 10]

لسٹ جامعیت (list comprehension) کے قواعد و ضوابط کی بنیاد سیٹ بنانے والے اعداد اور علامتوں(set builder notation) پر استوار ہے۔

عموما اس شکل میں ہوتی ہے

[Y for X in LIST]

اس میں Y کو عام طور پر جوابی فنکشن کے طور پر لیا جاتا ہے، X ایک متغیر ہے اور LIST ایک اندرونی سیٹ ہے۔
اس بیان کا مطلب ہے کہ ہر X کو جو LIST میں موجود ہے اس پر Y کرو۔
آسان الفاظ میں ہر X رکن جو لسٹ میں موجود ہے اس کے لیے ایک عمل Y کیا جائے ، یہاں Y سادہ X رکن بھی ہو سکتا ہے اور اس پر مزید کوئی اور عمل بھی۔
 
ان پٹ ترتیب (input sequence)
ایک متغیر جو اندرونی ترتیب (input sequence) کے اراکین کو ظاہر کرے
ایک اختیاری توثیقی اظہاریہ (predicate expression)
ایک ما حصل اظہاریہ (output list) جو ان پٹ ترتیب کے ممبران سے حاصل لسٹ کے ممبران پیدا کرے توثیق (predicate)کے بعد۔

اس مثال میں ہم ترتیب میں مکمل اعداد کی ایک لسٹ حاصل کریں گے اور اس کا مربع لیں گے۔
PHP:
a_list = [1, ‘4’, 9, ‘a’, 0, 4]
 
squared_ints = [ e**2 for e in a_list if type(e) == types.IntType ]
 
print(squared_ints)
#[ 1, 81, 0, 16 ]

اوپر والی مثال کی تصویری شکل اس طرح سے ہوگی۔
list%2Bcomprehension.jpg

تکراری(iterator) حصہ اندرونی ترتیب کے ہر ممبر کی تکرار (iterator) کے ذریعہ ہر حصہ تک پہنچ رہا ہے۔
توثیق حصہ چیک کر رہا ہے کہ ممبر ایک مکمل عدد ہے کہ نہیں۔
اگر ممبر ایک مکمل عدد ہے تو وہ بیرونی اظہاریہ کو بھیجا جاتا ہے جہاں اس کا مربع لے کر اسے حاصل لسٹ کا ممبر بنا دیا جاتا ہے۔

یہ کوڈ پائتھون 3 میں مکمل طور پر نہیں چلے گا کیونکہ if بیان والا کوڈ بدلنا ہوگا۔ تبدیل شدہ کوڈ اس طرح سے ہوگا۔

PHP:
a_list = [1, '4', 9, 'a', 0, 4]
 
squared_ints = [ e**2 for e in a_list if isinstance(e,int) ]
 
print(squared_ints)
 
پھیروں کے پھیرے (Loops of loops)

لسٹ جامعیت (list comprehension) کے ذریعے ہم ایک سے زیادہ لسٹ کا اعادہ کر سکتے ہیں۔

PHP:
>>> list_a = ['A', 'B']
>>> list_b = [1,2]
>>> [(x, y) for x in list_a for y in list_b]
[('A', 1), ('A', 2), ('B', 1), ('B', 2)]

for لوپ میں جیسے عموما ہوتا ہے ، آخری والی لوپ پہلے مکمل ہوگی اور پہلی لوپ کا ایک ممبر دوسری لوپ کے ہر ممبر کے ساتھ مل کر ایک tuple بنائے گا جو جوابی لسٹ میں جوڑوں کی شکل میں ہوں گے۔

اگر لسٹ در لسٹ بنانی ہو تو ایسا بھی ممکن ہے ۔ درج ذیل مثال میں لسٹوں کی ایک لسٹ، لسٹ جامعیت (list comprehension) کے ذریعے بنائی گئی ہے۔

PHP:
>>> list_a = ['A', 'B']
>>> list_b = ['C', 'D']
>>> [[x+y for x in list_a] for y in list_b]
[['AC', 'BC'], ['AD', 'BD']]
 
Top