كيفية ضغط قائمتين في بايثون
في كثير من الأحيان قد تكون مهتمًا بضغط (أو “دمج”) قائمتين في بايثون. ولحسن الحظ، من السهل القيام بذلك باستخدام الدالة zip().
يوضح هذا البرنامج التعليمي عدة أمثلة للاستخدام العملي لهذه الوظيفة.
مثال 1: ضغط قائمتين متساويتين في الطول في قائمة واحدة
يوضح بناء الجملة التالي كيفية ضغط قائمتين متساويتين في الطول في قائمة واحدة:
#define list a and list b a = ['a', 'b', 'c'] b = [1, 2, 3] #zip the two lists together into one list list( zip (a,b)) [('a', 1), ('b', 2), ('c', 3)]
مثال 2: ضغط قائمتين متساويتين في الطول في قاموس
يوضح بناء الجملة التالي كيفية ضغط قائمتين متساويتين في الطول في القاموس:
#define list of keys and list of values keys = ['a', 'b', 'c'] values = [1, 2, 3] #zip the two lists together into one dictionary dict( zip (keys, values)) {'a': 1, 'b': 2, 'c': 3}
مثال 3: ضغط قائمتين غير متساويتين في الطول
إذا كانت القائمتان لهما أطوال غير متساوية، فسيتم اقتطاع ملف zip() إلى طول القائمة الأقصر:
#define list a and list b a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] #zip the two lists together into one list list( zip (a,b)) [('a', 1), ('b', 2), ('c', 3)]
إذا كنت تريد منع zip() من الاقتطاع إلى طول القائمة الأقصر، فيمكنك بدلاً من ذلك استخدام وظيفة zip_longest() من مكتبة itertools .
بشكل افتراضي، تقوم هذه الدالة بملء “لا شيء” للقيم المفقودة:
from itertools import zip_longest #define list a and list b a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] #zip the two lists together without truncating to length of shortest list list( zip_longest (a, b)) [('a', 1), ('b', 2), ('c', 3), ('d', None)]
ومع ذلك، يمكنك استخدام وسيطة قيمة التعبئة لتحديد قيمة تعبئة مختلفة لاستخدامها:
#define list a and list b a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] #zip the two lists together, using fill value of '0' list( zip_longest (a, b, fillvalue= 0 )) [('a', 1), ('b', 2), ('c', 3), ('d', 0)]
يمكنك العثور على الوثائق الكاملة لوظيفة zip_longest() هنا .