الفرق بين المراجعتين لصفحة: «Python/itertools/zip longest»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 53: | سطر 53: | ||
pass | pass | ||
</syntaxhighlight> | </syntaxhighlight> | ||
* إن كانت هناك إمكانيّة أن يكون أحد الكائنات القابلة للتّكرار لا نهائيًّا، فعندئذٍ يجب استعمال دالّة للحدّ من عدد الاستدعاءات (مثل الدّالة <code>[[Python/itertools/takewhile|itertools.takewhile()]]</code> أو الدّالة <code>[[Python/itertools/islice|itertools.islice()]]</code> مثلًا). | |||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/iterators|المكرِّرات Iterators في بايثون]]. | * [[Python/iterators|المكرِّرات Iterators في بايثون]]. | ||
* [[Python/generators|المولدات Generators في بايثون]]. | * [[Python/generators|المولدات Generators في بايثون]]. | ||
* [[Python/zip| | * الدالة <code>[[Python/zip|zip()]]</code>: تُركّب عناصر الكائنات القابلة للتّكرار المُعطاة مع التّوقف عند أقصرها. | ||
* | * الدالة <code>[[Python/itertools/takewhile|itertools.takewhile()]]</code>: لمُكرّر يُعيد العناصرَ من الكائن القابل للتّكرار المعطى ما دامت العبارة المنطقيّة المُعطاة صحيحة. | ||
* | * الدالة <code>[[Python/itertools/islice|itertools.islice()]]</code>: لمُكرّر يُعيد عناصر مُنتقاة من الكائن القابل للتّكرار المُعطى. | ||
* [[Python/list| | * الدالة <code>[[Python/list|list()]]</code>: تُحوّل كائنًا قابلًا للتّكرار إلى قائمة. | ||
== مصادر == | == مصادر == |
مراجعة 05:54، 19 يونيو 2018
تعيد الدّالة itertools.zip_longest()
مُكرّرًا يُركّب العناصر من كلّ كائن من الكائنات القابلة للتّكرار المُعطاة.
إن كانت الكائنات القابلة للتّكرار غير مُتساويّة في الطّول، فستُستخدم قيمة لملء الفراغات. يُكمل التّكرار إلى أن تنتهي قيم أطول كائن من الكائنات القابلة للتّكرار.
البنية العامة
itertools.zip_longest(*iterables, fillvalue=None)
المعاملات
iterables
الكائنات القابلة للتّكرار المُراد تركيبها.
fillvalue
القيمة التي ستُملؤ بها الفراغات. إن لم تُعيّن قيمة للمُعامل فالقيمة الافتراضيّة تكون القيمةَ None
.
القيمة المعادة
مُكرّر يُعيد صفوفًا تُركّب عناصرها من عناصر الكائنات القابلة للتّكرار المُعطاة، ويملؤ الفراغات بقيمة المُعامل fillvalue
.
أمثلة
المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:
>>> list(itertools.zip_longest(range(3), 'abcdef'))
[(0, 'a'), (1, 'b'), (2, 'c'), (None, 'd'), (None, 'e'), (None, 'f')]
>>> list(itertools.zip_longest(range(3), 'abcdef', fillvalue=False))
[(0, 'a'), (1, 'b'), (2, 'c'), (False, 'd'), (False, 'e'), (False, 'f')]
ملاحظات
- الدّالة مُكافئة لما يلي:
class ZipExhausted(Exception):
pass
def zip_longest(*args, **kwds):
# zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
fillvalue = kwds.get('fillvalue')
counter = len(args) - 1
def sentinel():
nonlocal counter
if not counter:
raise ZipExhausted
counter -= 1
yield fillvalue
fillers = repeat(fillvalue)
iterators = [chain(it, sentinel(), fillers) for it in args]
try:
while iterators:
yield tuple(map(next, iterators))
except ZipExhausted:
pass
- إن كانت هناك إمكانيّة أن يكون أحد الكائنات القابلة للتّكرار لا نهائيًّا، فعندئذٍ يجب استعمال دالّة للحدّ من عدد الاستدعاءات (مثل الدّالة
itertools.takewhile()
أو الدّالةitertools.islice()
مثلًا).
انظر أيضًا
- المكرِّرات Iterators في بايثون.
- المولدات Generators في بايثون.
- الدالة
zip()
: تُركّب عناصر الكائنات القابلة للتّكرار المُعطاة مع التّوقف عند أقصرها. - الدالة
itertools.takewhile()
: لمُكرّر يُعيد العناصرَ من الكائن القابل للتّكرار المعطى ما دامت العبارة المنطقيّة المُعطاة صحيحة. - الدالة
itertools.islice()
: لمُكرّر يُعيد عناصر مُنتقاة من الكائن القابل للتّكرار المُعطى. - الدالة
list()
: تُحوّل كائنًا قابلًا للتّكرار إلى قائمة.