Python 3.0+itertoolsфункция
itertools.zip_longest
itertools
Как zip(), но продолжает до самого длинного итерируемого, добивая fillvalue.
Синтаксис
itertools.zip_longest(*iterables, fillvalue=None)
Ленивая — отдаёт итератор, значения тянутся по требованию. Главная ловушка: fillvalue один на все короткие последовательности, а его дефолт None легко совпадает с настоящим None в данных, и тогда не отличить добитый пропуск от реального значения. Противоположность — zip(..., strict=True) из 3.10, который наоборот падает, если длины не совпали.
Примеры
import itertools
print(list(itertools.zip_longest([1, 2], ['a'], fillvalue='?'))) # → [(1, 'a'), (2, '?')]
print(list(itertools.zip_longest([1, 2], ['a']))) # → [(1, 'a'), (2, None)]
print(list(zip([1, 2], ['a']))) # → [(1, 'a')]
print([sum(p) for p in itertools.zip_longest([1, 2, 3], [10, 20], fillvalue=0)]) # → [11, 22, 3]
print(list(itertools.zip_longest('ab', '1', '', fillvalue='-'))) # → [('a', '1', '-'), ('b', '-', '-')]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности