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! >>>