Программа курса:
Циклы с enumerate и zip в Python
Функции enumerate
и zip
являются мощными инструментами в Python для работы с итерируемыми объектами. Они упрощают задачи, связанные с перебором данных и объединением коллекций. В этой лекции мы подробно рассмотрим, как использовать эти функции в циклах for
, с множеством примеров для лучшего понимания их возможностей и применения.
Функция enumerate

Функция enumerate
позволяет итерироваться по коллекции, одновременно получая индекс текущего элемента. Это особенно полезно, когда вам нужно отслеживать позиции элементов во время итерации, не создавая дополнительных переменных или не усложняя код.
Синтаксис и Основы
Функция enumerate
имеет следующий синтаксис:
enumerate(iterable, start=0)
- iterable: Итерируемый объект, например список, строка или кортеж.
- start: Значение, с которого начнётся отсчёт индексов (по умолчанию 0).
enumerate
возвращает объект-итератор, который генерирует кортежи, где первый элемент — это индекс, а второй — значение из итерируемого объекта.
Пример 1: Основное использование enumerate
Рассмотрим пример, в котором мы используем enumerate
, чтобы получить индексы и значения из списка фруктов.
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"Index: {index}, Fruit: {fruit}")
Объяснение:
- Мы создаём список фруктов и используем
enumerate
для получения как индекса, так и значения каждого элемента списка. - Внутри цикла
for
переменнаяindex
содержит индекс текущего элемента, аfruit
— его значение. - Результат будет содержать индекс и название каждого фрукта в списке.
Вывод:
Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: cherry
Пример 2: Изменение начального индекса
Если вам нужно начать отсчёт индексов не с 0, а с другого числа, вы можете использовать параметр start
.
names = ['John', 'Paul', 'George', 'Ringo']
for index, name in enumerate(names, start=1):
print(f"Member {index}: {name}")
Объяснение:
- Мы передаём параметр
start=1
вenumerate
, чтобы индексы начинались с 1. - Это может быть полезно, например, когда вы создаёте нумерованный список или отчет.
Вывод:
Member 1: John
Member 2: Paul
Member 3: George
Member 4: Ringo
Функция zip

Функция zip
объединяет несколько итерируемых объектов в один. Она создаёт итератор, который генерирует кортежи, содержащие элементы из каждого из переданных итерируемых объектов. Этот процесс продолжается до тех пор, пока самый короткий из итерируемых объектов не будет исчерпан.
Синтаксис и Основы
Функция zip
имеет следующий синтаксис:
zip(*iterables)
- iterables: Один или несколько итерируемых объектов, которые вы хотите объединить.
Пример 3: Объединение двух списков
Использование zip
для объединения двух списков в кортежи позволяет легко создать связанные пары элементов.
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
Объяснение:
- Мы создаём два списка:
names
иscores
. zip
объединяет элементы из обоих списков в кортежи, где каждый кортеж содержит элементы с одинаковыми индексами.- Внутри цикла
for
, переменныеname
иscore
содержат значения из соответствующих позиций в списках.
Вывод:
Alice scored 85
Bob scored 90
Charlie scored 78
Пример 4: Объединение списков разной длины
Если списки разной длины, zip
остановится на самой короткой последовательности.
names = ['Alice', 'Bob']
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
Объяснение:
- В этом случае
names
содержит 2 элемента, аscores
— 3. zip
объединяет элементы до тех пор, пока не будет достигнут конец самого короткого списка.
Вывод:
Alice scored 85
Bob scored 90
Совместное использование enumerate
и zip
Совместное использование enumerate
и zip
полезно, когда вам нужно получить индексы элементов, а также объединить несколько коллекций. Это позволяет эффективно итерировать по нескольким спискам, отслеживая их позиции.
Пример 5: Итерирование по нескольким спискам с индексами
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 90, 78]
comments = ['Good', 'Excellent', 'Needs Improvement']
for index, (name, score, comment) in enumerate(zip(names, scores, comments), start=1):
print(f"Record {index}: {name} scored {score} - {comment}")
Объяснение:
- Мы создаём три списка и объединяем их с помощью
zip
, чтобы получить кортежи, содержащие элементы из всех трёх списков. enumerate
позволяет получить индекс записи, начиная с 1.- Внутри цикла
for
, переменнаяindex
содержит текущий номер записи, аname
,score
иcomment
содержат соответствующие элементы из списков.
Вывод:
Record 1: Alice scored 85 - Good
Record 2: Bob scored 90 - Excellent
Record 3: Charlie scored 78 - Needs Improvement
Пример 6: Работа с двумя списками и их индексами
years = [2000, 2001, 2002]
events = ['Millennium', 'Year of the Dragon', 'World Cup']
for index, (year, event) in enumerate(zip(years, events), start=1):
print(f"Event {index}: {year} - {event}")
Объяснение:
- Здесь мы объединяем списки
years
иevents
с помощьюzip
. enumerate
предоставляет индекс, начиная с 1, для каждой записи.- Внутри цикла
for
, переменнаяindex
показывает номер события, аyear
иevent
содержат год и название события соответственно.
Вывод:
Event 1: 2000 - Millennium
Event 2: 2001 - Year of the Dragon
Event 3: 2002 - World Cup
Пример 7: Суммирование элементов двух списков
list1 = [10, 20, 30]
list2 = [5, 15, 25]
total_sum = 0
for x, y in zip(list1, list2):
total_sum += x + y
print(f"Total sum: {total_sum}")
Объяснение:
- Мы используем
zip
, чтобы объединить два списка итерируемых объектов. - Внутри цикла
for
переменныеx
иy
содержат элементы изlist1
иlist2
, соответственно. - Суммируем их и добавляем к переменной
total_sum
.
Вывод:
Total sum: 85
Пример 8: Создание словаря из двух списков
*Тема словари будет рассмотрена в следующих модулях
keys = ['a', 'b', 'c']
values = [1, 2, 3]
result_dict = dict(zip(keys, values))
print(result_dict)
Объяснение:
- Мы объединяем списки
keys
иvalues
с помощьюzip
. - Используем
dict
для создания словаря, гдеkeys
становятся ключами, аvalues
— значениями.
Вывод:
{'a': 1, 'b': 2, 'c': 3}
Функции enumerate
и zip
в Python предоставляют мощные средства для работы с итерируемыми объектами. enumerate
позволяет легко отслеживать индексы элементов, а zip
— объединять несколько последовательностей. Совместное использование этих функций делает код более читаемым и эффективным, упрощая задачи, связанные с итерацией и обработкой данных. Практическое применение этих инструментов поможет вам писать более чистый и понятный код при работе с различными структурами данных.