Функция enumerate() в Python — как использовать
Функция enumerate() используется в Python для перечисления последовательности, итератора или любого другого объекта, поддерживающего итерацию.
Знакомство с функцией enumerate() в Python
В следующем примере определяется список фруктов и используется цикл for-in для перебора элементов списка и их вывода на печать:
fruits = ['Apple', 'Orange', 'Strawberry'] for fruit in fruits: print(fruit)
Выход:
Apple Orange Strawberry
Работает отлично, как и ожидалось.
Иногда вы хотите добавить индексы к выходу. Чтобы сделать это, вы можете придумать счетчик цикла, например:
fruits = ['Apple', 'Orange', 'Strawberry'] index = 1 for fruit in fruits: print(f'{index}.{fruit}') index += 1
Выход:
1.Apple 2.Orange 3.Strawberry
В этом примере индекс отслеживает индексы. Но у Python есть лучшее решение с функцией enumerate():
fruits = ['Apple', 'Orange', 'Strawberry'] for index, fruit in enumerate(fruits, start=1): print(f'{index}.{fruit}')
Выход:
1.Apple 2.Orange 3.Strawberry
С функцией enumerate() вы можете достичь того же результата с меньшим количеством кода. Кроме того, вам не нужно отслеживать индекс, увеличивая его в каждой итерации.
Enumerate() — это встроенная функция со следующим синтаксисом:
enumerate(iterable, start=0)
Функция enumerate() принимает два аргумента:
- iterable — это последовательность, итератор или любой объект, поддерживающий итерируемый протокол.
- start — начальное число, с которого функция начинает отсчет. По умолчанию равно нулю.
Функция enumerate() возвращает объект enumerate. Метод __next__() возвращаемого объекта enumerate возвращает кортеж, содержащий счетчик и значение, полученное в результате итерации по итерируемому объекту.
Смотрите следующий пример:
fruits = ['Apple', 'Orange', 'Strawberry'] e = enumerate(fruits, start=1) print(type(e))
В этом примере функция enumerate() возвращает e, который является экземпляром класса enumerate:
<class 'enumerate'>
Класс enumerate имеет метод __next__(), который возвращает кортеж:
fruits = ['Apple', 'Orange', 'Strawberry'] e = enumerate(fruits, start=1) print(e.__next__())
Выход:
(1, 'Apple')
Если вы продолжите вызывать метод __next__(), он вернет следующее по счету число со значением из списка:
fruits = ['Apple', 'Orange', 'Strawberry'] e = enumerate(fruits, start=1) print(e.__next__()) print(e.__next__()) print(e.__next__())
Выход:
(1, 'Apple') (2, 'Orange') (3, 'Strawberry')
Когда все элементы в списке будут перебраны, вызов метода __next__() вызовет исключение StopIteration:
fruits = ['Apple', 'Orange', 'Strawberry'] e = enumerate(fruits, start=1) print(e.__next__()) print(e.__next__()) print(e.__next__()) print(e.__next__()) # StopIteration
Функция enumerate() функционально эквивалентна следующей функции:
def enumerate(iterable, start=0): index = start for item in iterable: yield index, item index += 1