Возвращает итератор по кортежам, где i-тый кортеж содержит i-тый элемент каждой из указанных последовательностей.
zip(*iterables)
-> +py3.0 iterator -py3.0 list
iterables -- Итерируемые объекты, элементы которых следует упаковать в кортежи. Если передана одна последовательность, вернётся итератор по кортежам, состоящим из единственного элемента. Если последовательности не переданы, возвращается пустой итератор.

Итератор останавливается, когда исчерпана кратчайшая из последовательностей.

    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)

Внимание
Виду того, что длина кортежей соответствует длине кратчайшей из переданных последовательностей, используйте функцию, когда возможность потери данных из более длинных последовательностей допустима. В противном случае следует использовать itertools.zip_longest.

Python 2
Функция возвращает список кортежей.

+py2.4 Ранее функция требовала хотя бы одного аргумента и возбуждала TypeError, вместо возврата пустого списка.

  • Andy_kl
    06 октября 01:39
     Andy_kl про «zip»
    Гарантируется вычисление слева направо, что делает возможным следующую идиому кластеризации данных по группам n-длины — zip([iter(s)] * n)

    Опечатка: надо использовать zip(*[iter(s)] * n)