Enumerate — это функция, которая зацикливается на объекте (который является итерируемым) и отслеживает, сколько раз он зацикливался.
Хорошо, давайте упростим:
Что означает итерация? В математике итерация — это повторение процесса для получения последовательности результатов.
Что такое итерируемый объект?Итерируемый объект в Python — это объект, способный возвращать свои данные один за другим.
В python есть два типа циклов; while
, который зацикливается, пока выполняется определенное условие, а for
похож на while, но выполняется определенное количество раз.
Вы можете спросить: «Дэвиша, разве for i in range(x)
не делает то же самое?». Не совсем; так как если вы используете for i in range(x)
и хотите получить доступ к элементу i, вам придется сделать element[i]
. Но с for index, data in enumerate(x)
вы можете получить данные и индекс одновременно.
Как вы используете перечисление?
Когда вы объявляете переменную с перечислением (например: a = enumerate("aaa")
) и вызываете ее, она возвращает что-то вроде <enumerate object at 0x11009994>
, что является адресом памяти функции. Поэтому, чтобы получить предметы, вам придется использовать цикл. например for index, data in enumerate(x)
. Вы также можете использовать next(x)
для получения следующего значения перечисляемого списка.
Пример со списком
В приведенном выше примере я создал объект-список под названием «сторожи», который содержит имена всех сторожей.for index, name in enumerate(watchmen):
В этой строке я объявил две переменные; index
и name
, потому что перечисление разбивает объект на два. первый — это индекс (0 и далее), а второй — данные. Если вы запустите код, вывод должен быть;
0: John 1: Walter 2: Daniel 3: Eddie 4: Sally
Пример с циклом while
Настройка перечисления цикла while создать немного сложнее, чем цикл for. Как видите, я объявил enum
, который является перечисляемым объектом. Во время цикла while я установил две переменные; индекс и имя, которые берутся из функции next(enum)
. next() дает вам следующую итерацию перечисляемого объекта (также работает с генераторами).
Вы бы заметили try
и except
; Я разместил их, потому что While True
продолжается вечно, а enum
не имеет достаточно терминов, чтобы продолжаться вечно. Когда перечисляемый объект или генератор не имеет больше данных для предоставления (при вызове next()
), он вызывает исключение StopIteration
. Таким образом, функция exclude состоит в том, чтобы остановить цикл, как только он обнаружит исключение.
Следует ли заменить for i in range(len(x)):
на enumerate()
Есть несколько веских причин. Наиболее важные из них:
- Уборка кода (поскольку он намного короче, чем
for i in range(len(x)):
) - Скорость (с небольшим отрывом)
Заключение
Это моя статья о перечислении, надеюсь, вам понравилось!