В языке программирования 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
Использование 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. Подробнее про типы исключений и как их обрабатывать есть отдельная статья на сайте.