تجمع الوظيفة المدمجة في Python zip () بين عناصر كائنات متعددة قابلة للتكرار (قوائم ، مجموعات ، إلخ) وتُستخدم لاسترداد عناصر قوائم متعددة في حلقة for.
يصف هذا القسم الاستخدام التالي لوظيفة zip ().
- احصل على عناصر قوائم متعددة في حلقة for.
- التعامل مع عدد مختلف من العناصر
zip()
:ستتجاهل الوظيفة العناصر الزائدة عن الحد.itertools.zip_longest()
:هذه الوظيفة سوف تملأ العناصر المفقودة.
- احصل على قائمة مجموعات عناصر متعددة العناصر.
احصل على عناصر قوائم متعددة في حلقة for.
إذا كنت تريد استرداد واستخدام عناصر كائنات متعددة قابلة للتكرار (قوائم ، مجموعات ، إلخ) في نفس الوقت في حلقة for ، فحددها كوسيطات لوظيفة 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 () العناصر المفقودة.
باستخدام zip_longest () في الوحدة النمطية itertools للمكتبة القياسية ، من الممكن ملء العناصر المفقودة بقيم عشوائية عندما يكون عدد العناصر في كل قائمة مختلفًا.
بشكل افتراضي ، يتم ملؤه بـ بلا.
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
إذا تم تحديد وسيطة fillvalue ، فسيتم تعبئتها بهذه القيمة.
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 () ، لكن هذا ليس عمليًا لأنك تحتاج إلى معرفة العناصر المفقودة في القائمة مسبقًا.
إذا كنت ترغب في ملء قوائم متعددة بعدد غير معروف من العناصر ، ولكل منها قيمة مختلفة ، فيمكن النظر في الإجراء التالي.
- تحديد القيم لملء جميع القوائم.
- احصل على أقصى عدد من العناصر
- املأ كل القوائم بأقصى عدد من العناصر
- باستخدام وظيفة 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
يستخدم تدوين فهم القائمة وتوسيع القائمة بواسطة *.
- مقالات ذات صلة:استخدام تدوين قائمة Python
احصل على قائمة مجموعات عناصر متعددة العناصر.
ترجع الدالة zip () مكررًا (كائن مضغوط) وهو مجموعة من عناصر كائنات متعددة قابلة للتكرار.
يمكن استخدامه أيضًا خارج حلقة for ، ولا يقتصر الهدف على القوائم.
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'>