Python، zip() فنکشن کا استعمال کرتے ہوئے: ایک ساتھ متعدد فہرستوں کے عناصر کو حاصل کرنا

کاروبار

Python کا بلٹ ان فنکشن zip() ایک سے زیادہ تکراری آبجیکٹ (فہرستیں، ٹوپلز، وغیرہ) کے عناصر کو یکجا کرتا ہے اور ایک فار لوپ میں متعدد فہرستوں کے عناصر کو بازیافت کرنے کے لیے استعمال ہوتا ہے۔

یہ سیکشن zip() فنکشن کے درج ذیل استعمال کی وضاحت کرتا ہے۔

  • ایک فار لوپ میں متعدد فہرستوں کے عناصر حاصل کریں۔
  • عناصر کی مختلف تعداد سے نمٹنا
    • zip():فنکشن ان عناصر کو نظر انداز کر دے گا جو بہت زیادہ ہیں۔
    • itertools.zip_longest():یہ فنکشن غائب عناصر کو پُر کرے گا۔
  • متعدد تکرار کے عناصر کے ٹیپلس کی فہرست حاصل کریں۔

ایک فار لوپ میں متعدد فہرستوں کے عناصر حاصل کریں۔

اگر آپ ایک ہی وقت میں ایک ہی وقت میں ایک سے زیادہ تکراری آبجیکٹ (فہرست، ٹوپلز، وغیرہ) کے عناصر کو بازیافت اور استعمال کرنا چاہتے ہیں، تو انہیں zip() فنکشن کے دلائل کے طور پر بیان کریں۔

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

صرف دو نہیں بلکہ تین یا زیادہ بھی۔

points = [100, 85, 90]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 90

عناصر کی مختلف تعداد سے نمٹنا

zip() فنکشن عناصر کی ایک بڑی تعداد کو نظر انداز کرتا ہے۔

zip() فنکشن میں، اگر ہر فہرست میں عناصر کی تعداد مختلف ہے، تو عناصر کی کم (چھوٹی) تعداد تک واپس آ جائے گی، اور زیادہ تعداد کو نظر انداز کر دیا جائے گا۔

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

itertools.zip_longest() فنکشن غائب عناصر کو بھر دے گا۔

معیاری لائبریری itertools ماڈیول میں zip_longest() کا استعمال کرتے ہوئے، گمشدہ عناصر کو صوابدیدی اقدار کے ساتھ پُر کرنا ممکن ہے جب ہر فہرست میں عناصر کی تعداد مختلف ہو۔

پہلے سے طے شدہ طور پر، یہ None سے بھرا ہوا ہے۔

from itertools import zip_longest

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip_longest(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave None

اگر فل ویلیو دلیل کی وضاحت کی گئی ہے، تو یہ اس قدر سے بھر جائے گی۔

for name, age in zip_longest(names, ages, fillvalue=20):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave 20

یہاں تک کہ اگر لاپتہ عناصر کے ساتھ ایک سے زیادہ فہرستیں ہیں، بھری جانے والی قدر یکساں ہے۔ مختلف اقدار کی وضاحت کرنا ممکن نہیں ہے۔

points = [100, 85]

for name, age, point in zip_longest(names, ages, points, fillvalue=20):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 20
# Dave 20 20

zip_longest() کے اندر zip_longest() کا استعمال کرکے ایک مختلف قدر کی وضاحت کرنا ممکن ہے، لیکن یہ عملی نہیں ہے کیونکہ آپ کو پہلے سے یہ جاننا ہوگا کہ فہرست کے کون سے عناصر غائب ہیں۔

اگر آپ متعدد فہرستوں کو عناصر کی نامعلوم تعداد کے ساتھ بھرنا چاہتے ہیں، ہر ایک کی قدر مختلف ہے، تو درج ذیل طریقہ کار پر غور کیا جا سکتا ہے۔

  1. تمام فہرستوں کو بھرنے کے لیے اقدار کی وضاحت کریں۔
  2. عناصر کی زیادہ سے زیادہ تعداد حاصل کریں۔
  3. تمام فہرستوں کو عناصر کی زیادہ سے زیادہ تعداد میں پُر کریں۔
  4. zip() فنکشن کا استعمال
fill_name = 'XXX'
fill_age = 20
fill_point = 50

len_names = len(names)
len_ages = len(ages)
len_points = len(points)

max_len = max(len_names, len_ages, len_points)

names = names + [fill_name] * (max_len - len_names)
ages = ages + [fill_age] * (max_len - len_ages)
points = points + [fill_point] * (max_len - len_points)

print(names)
print(ages)
print(points)
# ['Alice', 'Bob', 'Charlie', 'Dave']
# [24, 50, 18, 20]
# [100, 85, 50, 50]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50

عناصر کی سب سے بڑی تعداد کو بھرنے کے عمل میں، ہم درج ذیل کام کرتے ہیں۔

  • صوابدیدی قدر اور عناصر کی تعداد کے ساتھ فہرست شروع کرنا
  • + آپریٹر ایک ساتھ فہرستوں میں شامل ہونے کے لئے

اگر ہم اسے فنکشن میں تبدیل کرتے ہیں، تو یہ اس طرح لگتا ہے۔ اصل فہرست اور فہرست کو بھرنے والی اقدار کو بالترتیب تکرار (فہرست یا ٹوپل) دلائل کے طور پر بیان کیا گیا ہے۔

def my_zip_longest(iterables, fillvalues):
    max_len = max(len(i) for i in iterables)
    return zip(*[list(i) + [v] * (max_len - len(i)) for i, v in zip(iterables, fillvalues)])

for name, age, point in my_zip_longest((names, ages, points), ('XXX', 20, 50)):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50

یہ فہرست فہمی اشارے اور فہرست کی توسیع کو * کے ذریعے استعمال کرتا ہے۔

متعدد تکرار کے عناصر کے ٹیپلس کی فہرست حاصل کریں۔

zip() فنکشن ایک ایٹریٹر (زپ آبجیکٹ) لوٹاتا ہے جو کہ ایک سے زیادہ تکراری اشیاء کے عناصر کا ایک مجموعہ ہے۔
اسے فار لوپ کے باہر بھی استعمال کیا جا سکتا ہے، اور ہدف صرف فہرستوں تک محدود نہیں ہے۔

names = ['Alice', 'Bob', 'Charlie']
ages = (24, 50, 18)

z = zip(names, ages)
print(z)
print(type(z))
# <zip object at 0x10b57b888>
# <class 'zip'>

اگر آپ ایک سے زیادہ قابل تکرار اشیاء کے عناصر کی فہرست بطور ٹیپل حاصل کرنا چاہتے ہیں تو فہرست بنانے کے لیے list() کا استعمال کریں۔

l = list(zip(names, ages))
print(l)
print(type(l))
print(type(l[0]))
# [('Alice', 24), ('Bob', 50), ('Charlie', 18)]
# <class 'list'>
# <class 'tuple'>