تقنية

zip_longest في بايثون: هل None تعني موضعًا ناقصًا؟

None الأولى أصلية والثانية حشو.
مصدران للقيمة.

None في ناتج zip_longest قد تكون قيمة أصلية أو حشوًا؛ قيمة الحشو الافتراضية None. [1]

الخلاصة السريعة

لا؛ قد تكون عنصرًا من المدخل. [1]

  • None في ناتج zip_longest قد تكون قيمة أصلية أو حشوًا؛ قيمة الحشو الافتراضية None. [1]
  • على CPython 3.12.14، left تساوي [None]، وright تساوي ["bud","leaf"]؛ قائمتان منتهيتان. [1]
  • الناتج [(None,"bud"),(None,"leaf")]. None الأولى أصلية؛ الثانية حشو بعد نفاد left، وتستمر العملية إلى نفاد الأطول. [1]
  • للتمييز، ننشئ marker=object() ونمرر fillvalue=marker؛ العلامة ليست عنصرًا في مدخلنا. [1]
  • عند اختبار value is marker مع كل زوج، نحصل على False bud ثم True leaf؛ الثاني وحده حشو. الفحص يخص العلامة المحتفظ بها في هذه العملية. [1]

القيمة ومصدرها

None في ناتج zip_longest قد تكون قيمة أصلية أو حشوًا؛ قيمة الحشو الافتراضية None. [1]

طولان مختلفان

على CPython 3.12.14، left تساوي [None]، وright تساوي ["bud","leaf"]؛ قائمتان منتهيتان. [1]

الحشو الافتراضي

الناتج [(None,"bud"),(None,"leaf")]. None الأولى أصلية؛ الثانية حشو بعد نفاد left، وتستمر العملية إلى نفاد الأطول. [1]

from itertools import zip_longest left=[None] right=["bud","leaf"] print(list(zip_longest(left,right))) [1]

اختبار العلامة: False bud ثم True leaf.
تمييز العلامة.

علامة مستقلة

للتمييز، ننشئ marker=object() ونمرر fillvalue=marker؛ العلامة ليست عنصرًا في مدخلنا. [1]

marker=object() for value,label in zip_longest(left,right,fillvalue=marker): print(value is marker,label) [1]

عند اختبار value is marker مع كل زوج، نحصل على False bud ثم True leaf؛ الثاني وحده حشو. الفحص يخص العلامة المحتفظ بها في هذه العملية. [1]

المراجع

  1. Python zip_longest

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.