Функция enumerate

В языке программирования Python 3 есть встроенная функция enumerate. Периодически требуется пройти по элементам списка и при этом обрабатывать не только значение элемента, но так же и его порядковый номер в списке. Вот в этом случае она и понадобится.

Аргументы

Аргументов у функции enumerate два:

  • Объект, элементы которого будем перебирать. Необязательно это должен быть список, это может быть, например, множество или словарь.
  • Начальное значение индекса (start). По умолчанию начальное значение равно 0.

Возвращает итератор на кортеж из двух элементов: индекс и элемент объекта.

Пример использования

Вот пример использования. С помощью enumerate мы перебираем весь список data. При переборе мы получали кортеж, состоящий из двух элементов. В переменной num будет порядковый номер элемента в списке. В переменной val – значение элемента. В качестве второго аргумента в функции enumerate мы использовали цифру 1, чтобы индексы начинались с единицы, а не с нуля.

data = [2, 5, 3, 4, 1, 5]
for num, val in enumerate(data, 1):
    print(str(num) + '-ое значение равно ' + str(val))

1-ое значение равно 2
2-ое значение равно 5
3-ое значение равно 3
4-ое значение равно 4
5-ое значение равно 1
6-ое значение равно 5

Без использования enumerate

Если не использовать enumerate в Python 3, то можно сделать свой счетчик. Задать ему начальное значение и при каждом проходе цикла его увеличивать. Например, следующим образом.

colors = ['red', 'green', 'blue']
ind = 1
for color in colors:
    print(str(ind) + '-й цвет: ' + color)
    ind += 1

1-й цвет: red
2-й цвет: green
3-й цвет: blue
Но раз есть в Python 3 такая функция, как enumerate, то ей надо пользоваться. Она упрощает код, делает его более понятным.

Использование next

Функция enumerate возвращает итератор. Используя функцию next можно получить кортежи.

a = [2, 5, 3, 4, 1, 5]
b = enumerate(a)
c = next(b)
print(c)
print(type(c))
print(next(b))

(0, 2)
<class 'tuple'>
(1, 5)

Если при очередном вызове next, следующий элемент будет отсутствовать, возникает исключение StopIteration. Подробнее про типы исключений и как их обрабатывать есть отдельная статья на сайте.