Олег Марков
Объединение списков в Python с помощью zip
Введение
В Python функция zip() используется для объединения нескольких последовательностей (списков, кортежей и т.д.) в один итерируемый объект. Она особенно полезна, когда нужно работать с элементами нескольких списков одновременно — например, при создании пар или объединении данных из разных источников.
В этой статье мы разберём, как использовать zip() для объединения списков и эффективной работы с данными.
Основы работы с zip()
Функция zip() принимает несколько итерируемых объектов и объединяет их поэлементно:
names = ['Анна', 'Иван', 'Петр']
ages = [25, 30, 22]
zipped = zip(names, ages)
print(list(zipped))Результат:
[('Анна', 25), ('Иван', 30), ('Петр', 22)]Каждый элемент результата — кортеж, содержащий элементы из всех исходных списков с одинаковыми индексами.
Работа с функцией zip() требует понимания базовых структур данных и итераторов в Python. Если вы хотите детальнее разобраться в этих концепциях — приходите на наш курс Основы Python.
На курсе 209 уроков и 34 упражнения, AI-тренажёры для безлимитной практики с кодом 24/7, живое ревью наставников и еженедельные встречи с менторами.
Пример объединения трёх списков
names = ['Анна', 'Иван', 'Петр']
ages = [25, 30, 22]
cities = ['Москва', 'Казань', 'Самара']
result = zip(names, ages, cities)
print(list(result))Результат:
[('Анна', 25, 'Москва'), ('Иван', 30, 'Казань'), ('Петр', 22, 'Самара')]Если длины списков различаются, zip() завершает работу при достижении конца самого короткого списка.
Использование zip() для создания словаря
zip() часто применяют для объединения списков ключей и значений:
keys = ['имя', 'возраст', 'город']
values = ['Анна', 25, 'Москва']
person = dict(zip(keys, values))
print(person)Результат:
{'имя': 'Анна', 'возраст': 25, 'город': 'Москва'}Распаковка с помощью zip(*)
Функцию можно использовать и в обратную сторону — для распаковки объединённых данных:
pairs = [('Анна', 25), ('Иван', 30), ('Петр', 22)]
names, ages = zip(*pairs)
print(names) # ('Анна', 'Иван', 'Петр')
print(ages) # (25, 30, 22)Комбинирование с циклами
zip() удобно использовать в циклах для одновременного перебора элементов нескольких списков:
names = ['Анна', 'Иван', 'Петр']
ages = [25, 30, 22]
for name, age in zip(names, ages):
print(f'{name} — {age} лет')Результат:
Анна — 25 лет
Иван — 30 лет
Петр — 22 летЧастые ошибки
- Попытка повторно использовать объект
zip, не преобразовав его в список. После первого прохода он исчерпывается. - Разные длины списков могут привести к потере данных.
- Ошибки при распаковке, если структура данных не соответствует ожидаемой.
Частозадаваемые вопросы
Как объединить списки разной длины без потери данных?
Используйте itertools.zip_longest() из стандартной библиотеки.
Можно ли объединить более трёх списков?
Да, zip() принимает любое количество итерируемых объектов.
Как получить список вместо кортежей?
Используйте: list(map(list, zip(a, b))).
Заключение
Функция zip() — мощный инструмент для синхронной обработки данных и объединения последовательностей. Она упрощает работу с несколькими коллекциями и делает код более читаемым.
Чтобы глубже разобраться в работе итераторов, коллекций и структур данных в Python, рекомендуем курс Основы Python, где вы научитесь применять функции вроде zip(), map() и filter() в реальных задачах.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев