Функция enumerate
Встроенная в Python функция enumerate() применяется для итерируемых коллекций (строки, списки, словари и др.) и создает объект, который генерирует кортежи, состоящие из двух элементов - индекса элемента и самого элемента.
>>> a = [10, 20, 30, 40] >>> for i in enumerate(a): ... print(i) ... (0, 10) (1, 20) (2, 30) (3, 40) >>> b = "hello" >>> for i in enumerate(b): ... print(i) ... (0, 'h') (1, 'e') (2, 'l') (3, 'l') (4, 'o')
В случае словарей нумеруются ключи:
>>> c = {1: 'a', 2: 'b', 3: 'c'} >>> for i in enumerate(c): ... print(i) ... (0, 1) (1, 2) (2, 3)
Функция enumerate() используется для упрощения прохода по коллекциям в цикле, когда кроме самих элементов требуется их индекс:
>>> a = [10, 20, 30, 40] >>> for id, item in enumerate(a): ... a[id] = item + 5 ... >>> a [15, 25, 35, 45]
В данном случае на каждой итерации цикла из объекта enumerate извлекается очередной кортеж, состоящий из индекса очередного элемента списка и значения этого элемента. Элементы кортежа связываются с идентификаторами id и item.
Без использования enumerate в цикл пришлось бы вводить переменную-счетчик или извлекать элементы по индексу. Например:
>>> a = [10, 20, 30, 40] >>> id = 0 # используется счетчик >>> for num in a: ... a[id] = num + 5 ... id += 1 ... >>> a [15, 25, 35, 45]
>>> a = [10, 20, 30, 40] >>> for i in range(len(a)): # перебор по индексам ... a[i] += 5 ... >>> a [15, 25, 35, 45]
Другими словами, без функции enumerate можно обойтись. Однако она предоставляет некое удобство.
Комментарии
Вариант с перебором индекса…