Программа курса:
Циклы с 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: 105
Пример 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 — объединять несколько последовательностей. Совместное использование этих функций делает код более читаемым и эффективным, упрощая задачи, связанные с итерацией и обработкой данных. Практическое применение этих инструментов поможет вам писать более чистый и понятный код при работе с различными структурами данных.
alexkor
,Почему в 7 примере Total sum: 85, а не 105?
admin
,alexkor, Исправил