Функция enumerate() — применяется для итерируемых объектов (списки, кортежи, строки, множества или словари) и позволяет получить одновременно и индекс элемента и его значение.
С помощью этой функции можно генерировать кортежи, которые будут включать в себя индекс и значение элемента.
Синтаксис функции enumerate()
enumerate(iterable, start=0)
iterable
— итерируемый объект
start
— необязательный параметр, целое число int
, начальное значение счётчика.
Примеры работы функции enumerate()
Получим список кортежей из заданного списка:
my_list = ['один', 'два', 'три', 'четыре'] print(list(enumerate(my_list))) #[(0, 'один'), (1, 'два'), (2, 'три'), (3, 'четыре')]
Если зададим доп. параметр, start
, то можно задать свои ключи:
my_list = ['один', 'два', 'три', 'четыре'] print(list(enumerate(my_list, start=10))) [(10, 'один'), (11, 'два'), (12, 'три'), (13, 'четыре')]
Перебор списка
my_list = ['один', 'два', 'три', 'четыре'] for i in enumerate(my_list): print(i) #(0, 'один') #(1, 'два') #(2, 'три') #(3, 'четыре')
Перебор строки
my_str = 'python' for i in enumerate(my_str): print(i) #(0, 'p') #(1, 'y') #(2, 't') #(3, 'h') #(4, 'o') #(5, 'n')
Перебор словаря
my_dict = {1: 'a', 2: 'b', 3: 'c'} for i in enumerate(my_dict): print(i) #(0, 1) #(1, 2) #(2, 3)
Здесь на выходе мы получаем индексы и ключи.
Перебор множества
my_set = {'один', 'два', 'три', 'четыре'} for i in enumerate(my_set): print(i) #(0, 'четыре') #(1, 'два') #(2, 'один') #(3, 'три')
Перебор кортежа
my_tuple = ('один', 'два', 'три', 'четыре') for i in enumerate(my_tuple): print(i) #(0, 'один') #(1, 'два') #(2, 'три') #(3, 'четыре')
«Распаковка» кортежа сгенерированного через enumerate()
Также, используя в цикле for одновременно 2 переменные, можно перебирать сразу и индекс и значение, и соответственно работать с ними:
my_list = ['один', 'два', 'три', 'четыре'] for i, v in enumerate(my_list): print(i, v) #0 один #1 два #2 три #3 четыре
my_list = ['один', 'два', 'три', 'четыре'] for i, v in enumerate(my_list, start=1): print(f'Элемент №{i} имеет значение => "{v}"') #Элемент №1 имеет значение => "один" #Элемент №2 имеет значение => "два" #Элемент №3 имеет значение => "три" #Элемент №4 имеет значение => "четыре"
Увеличим каждое значение элемента списка в 5 раз:
my_list = [1, 2, 3, 4, 5] for i, v in enumerate(my_list): my_list[i] = v * 5 print(my_list) #[5, 10, 15, 20, 25]
Здесь мы перебираем список и с помощью функции enumerate()
получаем индекс и значение элемента списка. В теле цикла обращаемся к элементу списка с помощью индекса, и значение этого элемента умножаем на 5.
Без использования функции этого выглядело бы так:
my_list = [1, 2, 3, 4, 5] for i in range(len(my_list)): my_list[i] = my_list[i] * 5 print(my_list) #[5, 10, 15, 20, 25]
Другими словами, можно обойтись и без функции enumerate()
, но иногда она может быть полезной и удобной.