enumerate(sequence, start=0)
sequence
- любая последовательность, итератор, или объект, поддерживающий метод итератора __next__()
,start
- число int
, начальное значение счётчика.tuple
- кортеж, содержащий пары ('счётчик', 'элемент') для элементов указанной последовательности.Функция enumerate()
вернет кортеж, содержащий отсчет от start
и значение, полученное из итерации по объекту. Переданный в функцию объект должен быть последовательностью, итератором или другим объектом, который поддерживает метод итератора __next__()
.
Функция enumerate()
применяется в случаях, когда необходим счётчик количества элементов в последовательности. Позволяет избавиться от необходимости инициировать и обновлять отдельную переменную-счётчик.
Функцию enumerate()
можно записать так:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
enumerate()
:Наиболее часто функцию enumerate()
используют в цикле for/in в качестве счетчика элементов последовательности:
>>> seq = list('абвгде')
>>> seq
# ['а', 'б', 'в', 'г', 'д', 'е']
>>> for i, val in enumerate(seq, start=1):
... print(f'№ {i} => {val}')
...
# № 1 => а
# № 2 => б
# № 3 => в
# № 4 => г
# № 5 => д
# № 6 => е
Получение списка парных кортежей (number, value)
(порядковый номер в последовательности, значение последовательности).
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
# можно указать с какой цифры начинать считать
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
enumerate()
для нахождения индексов минимального и максимального значений в числовой последовательности:>>> lst = [5, 3, 1, 0, 9, 7]
# пронумеруем список
>>> lst_num = list(enumerate(lst, 0))
# получился список кортежей, в которых
# первый элемент - это индекс значения списка,
# а второй элемент - само значение списка
>>> lst_num
# [(0, 5), (1, 3), (2, 1), (3, 0), (4, 9), (5, 7)]
# найдем максимум (из второго значения кортежей)
>>> tup_max = max(lst_num, key=lambda i : i[1])
>>> tup_max
# (4, 9)
>>> f'Индекс максимума: {tup_max[0]}, Max число {tup_max[1]}'
# 'Индекс максимума: 4, Max число 9'
# найдем минимум (из второго значения кортежей)
>>> tup_min = min(lst_num, key=lambda i : i[1])
>>> tup_min
# (3, 0)
>>> f'Индекс минимума: {tup_min[0]}, Min число {tup_min[1]}'
# 'Индекс минимума: 3, Min число 0'
Использование функции enumerate()
для того, что бы напечатать завершающий символ перевода строки.
import sys, time
def teleprint(*args, delay=0.05, str_join=' '):
""" Замедленный вывод текста в консоли """
text = str_join.join(str(x) for x in args)
n = len(text)
for i, char in enumerate(text, 1):
# если количество символов
# равно текущему счетчику.
if i == n:
# печать последнего символа с переводом строки '\n'
char = f'{char}\n'
sys.stdout.write(char)
sys.stdout.flush()
time.sleep(delay)
>>> teleprint('Привет Python!')
# Привет Python!
>>>