Сообщить об ошибке.

Функция zip() в Python, объединить элементы в список кортежей.

Объединяет элементы последовательностей в список кортежей.

Синтаксис:

zip(*iterables)

Параметры:

Возвращаемое значение:

Описание:

Функция zip() создает итератор кортежей, который объединяет элементы каждой из переданных последовательностей *iterables.

Функцию zip() возвращает итератор кортежей, где i-й кортеж содержит i-й элемент из каждой последовательности аргументов или итераций. Итератор останавливается, когда самая короткая входная итерация заканчивается. С единственным итерируемым аргументом, он возвращает итератор из 1 кортежа. Без аргументов возвращает пустой итератор.

Функция zip() эквивалентна следующему коду:

def zip(*iterables):
    # zip('ABCD', 'xy') --> Ax By
    sentinel = object()
    iterators = [iter(it) for it in iterables]
    while iterators:
        result = []
        for it in iterators:
            elem = next(it, sentinel)
            if elem is sentinel:
                return
            result.append(elem)
        yield tuple(result)

Функцию zip() следует использовать с последовательностями неравной длины, если вам не нужны конечные, не сопоставимые значения из более длинных итераций. Если эти значения важны, используйте itertools.zip_longest().

Совместно с оператором распаковки * в аргументах функции zip() можно использовать распаковку списков:

>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

Примеры объединения элементов нескольких списков в список кортежей:

x = zip()
print(list(x))
# []

a = [1, 2, 3, 4, 5, 6]
x = zip(a)
print(list(x))
# [(1,), (2,), (3,), (4,), (5,), (6,)]

a = list(range(5))
b = list(range(5, 10))
x = zip(a, b)
print(list(x))
# [(0, 5), (1, 6), (2, 7), (3, 8), (4, 9)]

# Один список меньше другого
a = [1, 2, 3, 4, 5, 6]
b = ['a', 'b', 'c', 'd']
c = list(range(5, 10))
x = zip(a, b, c)
print(list(x))
# [(1, 'a', 5), (2, 'b', 6), (3, 'c', 7), (4, 'd', 8)]