← Все вопросы

Как пройти по списку с индексом в Python (enumerate)?

Задан 29 месяцев назад1.5к просмотров1 ответ
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]:

  • меньше шансов ошибиться с границами;
  • читается понятнее — сразу видно и индекс, и сам элемент;
  • работает не только со списками, но и с любыми итерируемыми объектами.

Частые ошибки:

  1. Забыть распаковать пару: for x in enumerate(fruits): даст в x кортеж (0, 'яблоко'), а не отдельный элемент. Нужно for i, x in ....
  2. Путать start с шагом — start меняет только с какого числа начинать, а не на сколько прибавлять (шага у enumerate нет, он всегда +1).

Подход с range(len(...)) остаётся оправдан, только если индекс нужен сам по себе (например, для доступа к другому списку по той же позиции). В большинстве же случаев enumerate чище.

Ваш ответ

Войдите, чтобы ответить на вопрос.