← Все вопросы
Как пройти по списку с индексом в Python (enumerate)?
9
В цикле по списку мне нужен не только элемент, но и его порядковый номер. Сейчас завёл отдельную переменную i и увеличиваю её вручную, либо хожу по range(len(...)). Есть способ красивее? Слышал про enumerate.
1 ответ
13
✓ Принятый ответ — помог автору
Да, ручной счётчик не нужен — есть enumerate, он на каждой итерации отдаёт пару (индекс, элемент):
fruits = ['яблоко', 'банан', 'вишня']
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 яблоко
# 1 банан
# 2 вишня
Чтобы нумерация шла с 1, передайте start:
for i, fruit in enumerate(fruits, start=1):
print(f'{i}. {fruit}')
# 1. яблоко
# 2. банан
Чем это лучше for i in range(len(fruits)): с обращением fruits[i]:
- меньше шансов ошибиться с границами;
- читается понятнее — сразу видно и индекс, и сам элемент;
- работает не только со списками, но и с любыми итерируемыми объектами.
Частые ошибки:
- Забыть распаковать пару:
for x in enumerate(fruits):даст вxкортеж(0, 'яблоко'), а не отдельный элемент. Нужноfor i, x in .... - Путать
startс шагом —startменяет только с какого числа начинать, а не на сколько прибавлять (шага уenumerateнет, он всегда +1).
Подход с range(len(...)) остаётся оправдан, только если индекс нужен сам по себе (например, для доступа к другому списку по той же позиции). В большинстве же случаев enumerate чище.
Ваш ответ
Войдите, чтобы ответить на вопрос.