zip()
для параллельной итерации по нескольким коллекциям (спискам, кортежам, и т.д.). Он создает итератор кортежей, где каждый кортеж содержит элементы с одинаковым индексом из каждой переданной коллекции. Итератор завершается, когда заканчивается самая короткая коллекция.
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 28]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
Функция zip()
в Python используется для объединения нескольких коллекций (списков, кортежей, строк и т.д.) поэлементно. Она возвращает итератор кортежей, где i-й кортеж содержит i-й элемент из каждой входной коллекции.
Базовое использование:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [10, 20, 30]
zipped = zip(list1, list2, list3)
print(list(zipped)) # Вывод: [(1, 'a', 10), (2, 'b', 20), (3, 'c', 30)]
В этом примере, zip()
объединяет три списка в один итератор кортежей. Каждый кортеж содержит по одному элементу из каждого списка в соответствующей позиции.
Разная длина коллекций:
Если коллекции имеют разную длину, zip()
прекращает работу, когда заканчивается самая короткая коллекция. Элементы из более длинных коллекций, которые не имеют пары, игнорируются.
list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped)) # Вывод: [(1, 'a'), (2, 'b'), (3, 'c')]
В Python 3, zip()
возвращает итератор, а не список. Чтобы получить список, необходимо преобразовать итератор в список с помощью list()
.
Распаковка zip объекта:
Иногда нужно выполнить обратную операцию: разделить zip-объект обратно на исходные коллекции. Это можно сделать с помощью оператора *
(распаковка) в сочетании с zip()
:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
unzipped = zip(*zipped) # Обратите внимание на звездочку
list1_unpacked, list2_unpacked = map(list, unzipped) # Преобразуем итераторы в списки
print(list1_unpacked) # Вывод: [1, 2, 3]
print(list2_unpacked) # Вывод: ['a', 'b', 'c']
Важно отметить, что после первого использования zipped
итератор может быть исчерпан, поэтому для распаковки используйте zip(*zipped)
сразу после его создания.
Примеры использования:
dict(zip(keys, values))
for x, y in zip(list1, list2): ...