zip()
в Python позволяет итерировать одновременно по нескольким итерируемым объектам, таким как списки и кортежи. Она возвращает итератор, генерирующий кортежи, содержащие элементы из каждого входного итерируемого объекта.
list1 = [1, 2, 3]
tuple1 = ('a', 'b', 'c')
for item1, item2 in zip(list1, tuple1):
print(item1, item2)
# Output:
# 1 a
# 2 b
# 3 c
zip()
прекращает работу, когда заканчивается самый короткий итерируемый объект. Можно использовать itertools.zip_longest()
для итерации до тех пор, пока не закончится самый длинный итерируемый объект, заполняя недостающие значения значениями по умолчанию.
Функция zip()
в Python позволяет итерировать по нескольким итерируемым объектам (спискам, кортежам, строкам и т.д.) одновременно, создавая итератор кортежей. Каждый кортеж в этом итераторе содержит элементы, взятые по одному из каждого входного итерируемого объекта на соответствующей позиции.
Использование с списками:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [10, 20, 30]
zipped = zip(list1, list2, list3)
for item in zipped:
print(item) # Выведет (1, 'a', 10), (2, 'b', 20), (3, 'c', 30)
Использование с кортежами:
tuple1 = (1, 2, 3)
tuple2 = ('x', 'y', 'z')
zipped = zip(tuple1, tuple2)
for item in zipped:
print(item) # Выведет (1, 'x'), (2, 'y'), (3, 'z')
Использование со смешанными типами (список и кортеж):
my_list = [1, 2, 3]
my_tuple = ('a', 'b', 'c')
zipped = zip(my_list, my_tuple)
for item in zipped:
print(item) # Выведет (1, 'a'), (2, 'b'), (3, 'c')
Важные моменты:
zip()
остановится, когда самый короткий из входных итерируемых объектов будет исчерпан.itertools.zip_longest()
для итерации до тех пор, пока не будет исчерпан самый длинный итерируемый объект, заполняя недостающие значения значениями по умолчанию (по умолчанию None
).zip()
- это итератор. Чтобы получить список или кортеж из результатов, нужно явно преобразовать итератор: list(zip(list1, list2))
или tuple(zip(list1, list2))
.Пример с itertools.zip_longest()
:
import itertools
list1 = [1, 2]
list2 = ['a', 'b', 'c', 'd']
zipped = itertools.zip_longest(list1, list2, fillvalue='-')
for item in zipped:
print(item) # Выведет (1, 'a'), (2, 'b'), ('-', 'c'), ('-', 'd')
В заключение, zip()
- это универсальный инструмент для одновременной обработки нескольких итерируемых объектов, независимо от их конкретного типа (списки, кортежи и т.д.). Он особенно полезен для создания словарей из двух списков (ключи и значения), параллельной итерации по данным и других задач, где требуется синхронная обработка элементов из нескольких источников.