Функция zip в Python — это встроенная функция, которая принимает на вход несколько итерируемых объектов (например, списков) и поэлементно группирует их в итератор кортежей:
'''Простой пример работы функции zip(): '''
letters = ['а', 'б', 'в']
numbers = [1, 2, 3]
res = list(zip(letters, numbers))
print(res)
Вывод на экран: [('а', 1), ('б', 2), ('в', 3)]
Ниже мы разберем работу функции zip()
более подробно и рассмотрим примеры использования zip()
на практике:
- Почему функция
zip()
так называется, и как она работает? - Примеры объединения элементов в список и словарь с помощью функции
zip()
. - Как работает функция
zip()
в случае перебора итерируемых объектов разной длины? Примеры. - Примеры использования
zip()
для выполения одновременных операций с элементами списков.
Почему функция zip() так называется, и как она работает?
В переводе с английского «zip» — это застежка-молния. Основная задача молнии — совместить соответствующие зубцы половинок застежки. Встроенная в Python функция zip()
не случайно получила такое название. Она принимает на вход несколько итерируемых объектов и, по аналогии с застежкой, поэлементно группирует их. Таким образом, первый элемент, возвращенный функцией zip(), содержит только первые элементы итерируемых объектов, второй — вторые, и так далее. Процесс группировки остановится, как только элементы самого короткого итерируемого объекта будут исчерпаны. Для доступа к группам, сформированным функцией zip(), нужно преобразовать полученный результат в список, словарь, множество, либо кортеж с помощью соответствующих функций list()
, dict()
, set()
, tuple()
.
Примеры объединения элементов в список и словарь с помощью функции zip():
Как объединить 2 списка в список кортежей?
fruits = ['груши', 'яблоки', 'лимоны']
weights = [2, 3, 1]
# получим список кортежей
# из сгруппированных эл-в:
fruits_lst = list(zip(fruits, weights))
print(fruits_lst)
Вывод на экран: [('груши', 2), ('яблоки', 3), ('лимоны', 1)]
В рассмотренном примере мы поэлементно объединили списки fruits
и weights
, после чего преобразовали полученный итератор кортежей в список с помощью функции list()
.
Как создать словарь из двух списков?
fruits = ['груши', 'яблоки', 'лимоны']
weights = [2, 3, 1]
# создадим из исходных списков словарь:
fruits_dict = dict(zip(fruits, weights))
print(fruits_dict)
Результат на экране: {'груши': 2, 'яблоки': 3, 'лимоны': 1}
Как работает функция zip() в случае перебора итерируемых объектов разной длины?
В том случае, если аргументами функции zip()
являются итерируемые объекты разной длины, то процесс поэлементной остановится, как только элементы самого короткого итерируемого объекта будут исчерпаны:
letters = ['а', 'б', 'в', 'г']
numbers = [1, 2, 3]
res = list(zip(letters, numbers))
print(res)
Вывод на экран: [('а', 1), ('б', 2), ('в', 3)]
В приведенном выше примере представлены 2 списка: список letters
длиной 4 и список numbers
длиной 3. Поэтому итератор, полученный после применения функции zip()
будет содержать 3 группы элементов, в соответствии с длиной наиболее короткого списка numbers
.

Примеры использования zip в Python для выполения одновременных операций с элементами списков.
Cуммирование элементов 3-х списков с помощью функции zip()
:
lst1 = [0, 10, 20]
lst2 = [10, 10, 10]
lst3 = [1, 2, 3]
sum = [ a + b + c for a, b, c in zip(lst1, lst2, lst3)]
print(sum)
Вывод на экран: [11, 22, 33]
В приведенном выше примере все i-е
элементы списков lst1
, lst2
и lst3
суммируются (a+b+c
), а вычисленные суммы записываются на i-е
позиции списка sum
.
Использование функции zip() для перебора нескольких словарей:
Начиная с версии 3.6 Python словари сохраняют порядок введенных пар ключ-значение. Это позволяет использовать функцию zip()
для одновременного перебора нескольких словарей:
pet1 = {'питомец': 'кот', 'кличка': 'Гав', 'возраст': 1 }
pet2 = {'питомец': 'пёс', 'кличка': 'Шарик', 'возраст': 2 }
pets = list(zip(pet1.items(), pet2.items()))
for (key1, val1), (key2, val2) in pets:
print(f'{key1}: {val1}, {val2}')
Вывод на экран: питомец: кот, пёс кличка: Гав, Шарик возраст: 1, 2
В приведенном выше примере с помощью функции zip()
мы получаем за одну итерацию по 2 пары ключ — значение (одна пара для списка pet1
, вторая — для списка pet2
). После преобразования полученных результатов в списки, выводим значения в желаемом порядке.