Сообщить об ошибке.

Счетчик элементов последовательности в циклах Python

Синтаксис:

enumerate(sequence, start=0)

Параметры:

Возвращаемое значение:

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