zip(*iterables, strict=False)
Возвращает итератор по кортежам, где i-тый кортеж содержит i-тый элемент каждой из указанных последовательностей.
Параметры
iterables
: Итерируемые объекты, элементы которых следует упаковать в кортежи. Если передана одна последовательность, вернётся итератор по кортежам, состоящим из единственного элемента. Если последовательности не переданы, возвращается пустой итератор. Итератор останавливается, когда исчерпана кратчайшая из последовательностей.
Возвращаемое значение
Функция zip()
возвращает итератор кортежей на основе итерируемых объектов.
- Если мы не передаем никаких параметров,
zip()
возвращает пустой итератор - Если передается один итерируемый объект,
zip()
возвращает итератор кортежей, каждый из которых имеет только один элемент. - Если передано несколько итераций,
zip()
возвращает итератор кортежей, причем каждый кортеж содержит элементы из всех итераций. Предположим, две итерации передаются вzip()
; одна итерация, содержащая три, а другая, содержащая пять элементов. Тогда возвращаемый итератор будет содержать три кортежа. Это потому, что итератор останавливается, когда самая короткая итерация исчерпана.
Примеры
list(zip([1, 2, 4], [4, 5], [5, 7]))
# [(1, 4, 5), (2, 5, 7)]
Гарантируется вычисление слева направо, что делает возможным следующую идиому кластеризации данных по группам n-длины — zip(*iter(s) * n):
seq = [1,2,3,4,5,6]
list(zip(*[iter(seq)] * 2)) # [(1, 2), (3, 4), (5, 6)]
list(zip(*[iter(seq)] * 3)) # [(1, 2, 3), (4, 5, 6)]
В сочетании с оператором * функция может быть использована для распаковки списка:
first, second = zip(*[(1, 4), (2, 5), (3, 6)])
# (1, 2, 3), (4, 5, 6)