كيفية استخدام وظيفة Zip في بايثون

How Use Zip Function Python



ستغطي هذه المقالة دليلًا عن وظيفة zip المتوفرة في مكتبة وحدات Python القياسية. تسمح لك هذه الطريقة بدمج عناصر كائنات متعددة قابلة للتكرار وإقرانها. يمكنك بعد ذلك تشغيل المزيد من المنطق على هذه الأزواج. في كثير من الحالات ، يكون استخدام وظيفة zip أكثر كفاءة ونظافة من استخدام حلقات for متعددة ومتداخلة.

حول وظيفة الرمز البريدي

كما ذكرنا سابقًا ، تُستخدم وظيفة zip لإنشاء أزواج من عناصر كائنات متعددة قابلة للتكرار. ضع في اعتبارك المثال أدناه لفهم البنية الأساسية واستخدام وظيفة zip:







قائمة 1= ['إلى'و 'ب'و 'ج']
قائمة 2= ['تفاح'و 'كرة'و 'قط']
مضغوط= أزيز(قائمة 1وقائمة 2)
مطبعة (قائمة(مضغوط))

تحدد أول جملتين في نموذج التعليمات البرمجية أعلاه قائمتين تحتويان على بعض العناصر. بعد ذلك ، يتم استخدام وظيفة zip عن طريق تمرير متغيري list1 و list2 كوسائط. هذه هي الصيغة الرئيسية لوظيفة zip. ما عليك سوى تمرير القوائم أو غيرها من العناصر التكرارية المرتبة الصالحة كوسيطات تريد دمج عناصرها. أخيرًا ، يتم استخدام بيان الطباعة للحصول على إخراج المتغير المضغوط. بعد تشغيل نموذج الشفرة المذكور أعلاه ، يجب أن تحصل على الإخراج التالي:



[('a'، 'apple')، ('b'، 'ball')، ('c'، 'cat')]

لاحظ أن وظيفة zip تُرجع كائنًا من نوع zip وليس قائمة. يجب عليك تحويله إلى نوع متكرر ، كما هو موضح في بيان الطباعة أعلاه.



بعبارات بسيطة ، تلتقط وظيفة zip عناصر من نفس الفهرس من قائمتين وتجمعها كزوج في مجموعة. لذلك يتم دمج العنصر 0 من القائمة 1 مع العنصر 0 من القائمة 2 ، ويتم دمج العنصر الأول من القائمة 1 مع العنصر الأول من القائمة 2 وما إلى ذلك. تنتقل وظيفة Zip من اليسار إلى اليمين ويكون للمجموعة التي تحتوي على عناصر مقترنة نفس فهرس العناصر المخزنة فيها.





استخدام الرمز البريدي عندما لا تحتوي العناصر المتكررة على نفس عدد العناصر

في المثال المذكور أعلاه ، تحتوي كلتا القائمتين على عدد متساوٍ من العناصر. في حال كنت تتعامل مع بعض التعليمات البرمجية حيث لا تحتوي كلتا القائمتين على نفس عدد العناصر ، ستتوقف وظيفة zip عند العنصر الأخير في القائمة الذي يحتوي على أقل عدد من العناصر.

في المثال أدناه ، ستتوقف وظيفة zip عند العنصر c ، بغض النظر عن احتواء القائمة 2 على عنصر آخر.



قائمة 1= ['إلى'و 'ب'و 'ج']
قائمة 2= ['تفاح'و 'كرة'و 'قط'و 'لعبة']
مضغوط= أزيز(قائمة 1وقائمة 2)
مطبعة (قائمة(مضغوط))

بعد تشغيل نموذج الشفرة المذكور أعلاه ، يجب أن تحصل على الإخراج التالي:

[('a'، 'apple')، ('b'، 'ball')، ('c'، 'cat')]

يمكنك استخدام أكثر من اثنين من التكرارات عند استخدام وظيفة Zip

عادةً ما تُستخدم وظيفة zip لمقارنة كائنين متكررين. ومع ذلك ، يمكنك تمرير أي عدد من العناصر التكرارية كوسيطات إلى الدالة zip. سيظل مبدأ الوقوف عند العنصر الأخير في القائمة الأقصر ساريًا.

قائمة 1= ['إلى'و 'ب'و 'ج']
قائمة 2= ['تفاح'و 'كرة'و 'قط'و 'لعبة']
قائمة 3= ['5'و '3']
مضغوط= أزيز(قائمة 1وقائمة 2وقائمة 3)
مطبعة (قائمة(مضغوط))

بعد تشغيل نموذج الشفرة المذكور أعلاه ، يجب أن تحصل على الناتج التالي كنتيجة:

[('a'، 'apple'، '5')، ('b'، 'ball'، '3')]

إنشاء قوائم فردية من كائن من نوع Zip

إذا كان لديك بالفعل كائن مضغوط ، فيمكنك استخدامه لإعادة ملء القوائم الفردية التي تم استخدامها سابقًا عندما تم استدعاء وظيفة zip عليها لأول مرة.

قائمة 1= ['إلى'و 'ب'و 'ج']
قائمة 2= ['تفاح'و 'كرة'و 'قط'و 'لعبة']
قائمة 3= ['5'و '3']
مضغوط= أزيز(قائمة 1وقائمة 2وقائمة 3)
ل 1وl2وl3= أزيز(* مضغوط)
مطبعة (قائمة(ل 1)و قائمة(l2)و قائمة(l3))

بعد تشغيل نموذج الشفرة المذكور أعلاه ، يجب أن تحصل على الناتج التالي كنتيجة:

['a'، 'b'] ['apple'، 'ball'] ['5'، '3']

في نموذج الرمز أعلاه ، يتم تفريغ كائن zip باستخدام عامل التشغيل *. ثم يتم تغذية النتائج المنكمشة في استدعاء آخر لوظيفة zip التي تنشئ قوائم أصلية. لاحظ أنه قد لا تحصل على جميع العناصر مرة أخرى في القوائم الأصلية إذا تم استخدام قوائم ذات أطوال غير متساوية عند إنشاء الكائن المضغوط في المرة الأولى.

استخدام الرمز البريدي عندما تريد الاحتفاظ بالعناصر من أطول فترة قابلة للتكرار

في أمثلة متعددة أعلاه ، ربما لاحظت أن وظيفة zip تتوقف افتراضيًا عند العنصر الأخير من أقصر العناصر القابلة للتكرار. ماذا لو كنت تريد أن تستمر في التكرار حتى تصل إلى العنصر الأخير في أطول فترة تكرارية؟

في مثل هذه الحالة ، سيتعين عليك استخدام طريقة zip_longest () من وحدة itertools في Python. تعمل نفس وظيفة zip ، مع اختلاف بسيط واحد أنها تتوقف عند العنصر الأخير من أطول نوع قابل للتكرار.

من عند أدوات يستوردzip_longest
قائمة 1= ['إلى'و 'ب'و 'ج']
قائمة 2= ['تفاح'و 'كرة'و 'قط'و 'لعبة']
قائمة 3= ['5'و '3']
مضغوط=zip_longest(قائمة 1وقائمة 2وقائمة 3)
مطبعة (قائمة(مضغوط))

بعد تشغيل نموذج الشفرة المذكور أعلاه ، يجب أن تحصل على الناتج التالي كنتيجة:

[('a'، 'apple'، '5')، ('b'، 'ball'، '3')، ('c'، 'cat'، None)، (None، 'doll'، None) ]

يتم ملء القيم المفقودة ككائنات بلا نوع. يمكنك أيضًا توفير القيمة الخاصة بك لملءها عن طريق تمرير وسيطة إضافية للقيمة fillvalue إلى طريقة zip_longest.

من عند أدوات يستوردzip_longest
قائمة 1= ['إلى'و 'ب'و 'ج']
قائمة 2= ['تفاح'و 'كرة'و 'قط'و 'لعبة']
قائمة 3= ['5'و '3']
مضغوط=zip_longest(قائمة 1وقائمة 2وقائمة 3وfillvalue='my_value')
مطبعة (قائمة(مضغوط))

بعد تشغيل نموذج الشفرة المذكور أعلاه ، يجب أن تحصل على الناتج التالي كنتيجة:

[('a'، 'apple'، '5')، ('b'، 'ball'، '3')، ('c'، 'cat'، 'my_value')، ('my_value'، 'doll '،' my_value ')]

استنتاج

يمكن محاكاة وظيفة Zip باستخدام بعض عبارات الشروط والحلقات. ومع ذلك ، فإنه يساعد في الحفاظ على الكود منظمًا وأنظف عن طريق إزالة الإسهاب غير الضروري والعبارات المتكررة.