Функция 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 возвращает кортеж, содержащий счетчик и значение, полученное в результате итерации по итерируемому объекту.

Функция enumerate() в Python - пример

Смотрите следующий пример:

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

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *