Python Glossary English

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Сообщить о неточности