Когда в работе приходится иметь дело со списками, кортежами или другими итерируемыми объектами, мы можем применять функцию enumerate()
для добавления порядковых номеров элементов в итерации.
Содержание
Функция enumerate()
возвращает объект, который можно использовать для перечисления элементов итерируемого объекта вместе с их порядковыми номерами.
С помощью функции enumerate()
можно выполнять такие действия:
enumerate()
с циклом for
, можно получить доступ к элементам итерируемого объекта по их порядковому номеру.Так как функция enumerate()
позволяет перебирать элементы списка или другой итерируемой последовательности и возвращает индекс каждого элемента, синтаксис функции выглядит так:
enumerate(iterable, start=0)
В этой записи:
iterable
— это итерируемая последовательность, которую нужно перебирать;start
— это необязательный параметр, который определяет начальное значение для счетчика индекса. По умолчаниюstart
равен 0.При выполнении, функция enumerate()
возвращает объект перечислителя, который содержит кортежи (индекс, значение) для каждого элемента в итерируемой последовательности. Индекс начинается с start
и увеличивается на 1 для каждого последующего элемента.
Изучаешь Python самостоятельно и чувствуешь, что нужна помощь опытного ментора? Приходи на курсы Python Basic и Python Pro от Hillel и начни свой путь в IT.
Давайте рассмотрим простой пример перебора элементов списка. Допустим, у нас есть такой набор слов:
yakisslova = ['Highload', 'Today', 'Yesterday', 'Tomorrow'] for index, slovo in enumerate(yakisslova): print(index, slovo)
Результат выполнения этого перебора элементов:
0 Highload 1 Today 2 Yesterday 3 Tomorrow
Каждый элемент списка представлен кортежем (индекс, значение), который мы распаковываем в переменные index
и slovo
. Затем мы выводим значения переменных index
и slovo
. Индексы в Python начинаются с нуля.
Допустим, мы хотим перечислить и вывести на экран некоторые слова в списке words
и их порядковые номера с помощью функции enumerate()
. При этом хотим начать перечисление и вывод не с нуля, а с единицы.
Используем такой код на Python:
words = ["Highload", "Today", "Kiyv", "Technology", "Pythonexample"] # Используем функцию enumerate() для перечисления элементов списка words for index, word in enumerate(words): print(f"{index+1}. {word}")
В этом примере функция enumerate()
используется для перечисления слов в списке words
.
В цикле for
перебираются элементы списка words
. При этом функция enumerate()
возвращает пару (index
, word
), где:
index
— это порядковый номер элемента;word
— значение элемента.Мы выводим порядковый номер каждого элемента на экран, увеличенный на 1, чтобы он начинался с 1, а не с 0words
.
Результат работы программы:
1. Highload 2. Today 3. Kiyv 4. Technology 5. Pythonexample
Рассмотрим создание таблицы из двумерного списка, где первый столбец содержит порядковые номера строк. Это может быть полезным, например, при выводе результатов работы программы в удобочитаемом формате.
Допустим, мы имеем такой список с перечнем информации о студентах:
students = [ ['Хайлодов', 'Максим', '19'], ['Тудейкин', 'Константин', '20'], ['Хмуроутров', 'Илья', '18'], ['Шизобрякин', 'Валентин', '22'] ]
Мы можем использовать функцию enumerate()
для создания таблицы, в которой первый столбец содержит порядковые номера строк:
print('№\tФамилия\tИмя\tВозраст') print('---------------------------------') for index, student in enumerate(students, start=1): print(f"{index}\t{student[0]}\t{student[1]}\t{student[2]}")
В этом примере мы использовали функцию enumerate()
для перечисления строк списка students
с начальным значением 1, чтобы порядковые номера строк начинались с 1 вместо 0.
Затем мы использовали элементы каждой строки списка students
для заполнения столбцов таблицы.
Результат работы программы:
№ Фамилия Имя Возраст --------------------------------- 1 Хайлодов Максим 19 2 Тудейкин Константин 20 3 Хмуроутров Илья 18 4 Шизобрякин Валентин 22
Узнай больше про Python и стань опытным Python-разработчиком за 4 месяца на курсе от Mate Academy. Учиться можно бесплатно и платить уже после получения работы.
Используем enumerate()
в Python для поиска индексов минимального и максимального значений в списке чисел.
1. Сначала подготовим переменные
Допустим, исходная числовая последовательность представлена списком чисел numbers
. Укажем это в коде, а затем инициализируем переменные min_value
и max_value
значением первого элемента списка numbers
. Переменным min_index
и max_index
присвоим значение 0.
2. Приступаем к поиску
Используем цикл for
для перебора элементов списка numbers
с помощью функции enumerate()
. На каждой итерации сравниваем текущий элемент с переменными min_value
и max_value
:
min_value
, то обновляем значения переменных min_value
и min_index
;max_value
, то обновляем значения переменных max_value
и max_index
.Выводим результаты поиска с помощью строкового форматирования.
Весь код на Python:
numbers = [5, 2, 7, 1, 9, 3] # Создаем список чисел numbers min_value, max_value = float('inf'), float('-inf') # Инициализируем переменные min_value и max_value значением первого элемента списка numbers min_index, max_index = None, None # Инициализируем переменные min_index и max_index значением 0 for index, number in enumerate(numbers): # Используем цикл для перебора элементов списка numbers с помощью функции enumerate() if number < min_value: min_value = number min_index = index if number > max_value: max_value = number max_index = index print(f"Минимальное значение {min_value} находится на позиции {min_index}") print(f"Максимальное значение {max_value} находится на позиции {max_index}")
После выполнения получаем информацию о том, находятся ли минимальное и максимальное значения на нужных позициях в списке:
Минимальное значение 1 находится на позиции 3 Максимальное значение 9 находится на позиции 4
Есть и альтернативный вариант решения этой же задачи:
numbers = [5, 2, 8, 1, 9, 4, 6, 3, 7] # Находим индекс минимального значения с помощью функции min() и передавая в качестве # функции сравнения lambda-функцию, которая возвращает второй элемент кортежа min_index, min_value = min(enumerate(numbers), key=lambda x: x[1]) # Находим индекс максимального значения аналогичным способом, но уже передаем lambda-функцию # для поиска максимального значения max_index, max_value = max(enumerate(numbers), key=lambda x: x[1]) # Выводим результаты print(f"Минимальное значение {min_value} находится на позиции {min_index}") print(f"Максимальное значение {max_value} находится на позиции {max_index}")
Как видим, код существенно короче и проще, за счет использования лямбда-функции:
numbers
, который мы будем использовать для поиска минимального и максимального значений.min()
, чтобы найти минимальное значение в списке. Мы передаем ей результат функции enumerate(numbers)
, которая создает кортежи из пар (индекс, значение) для каждого элемента списка.lambda x: x[1]
, которая возвращает второй элемент кортежа (то есть значение элемента), по которому будет производиться сравнение. Результат функции min()
состоит из кортежа (индекс, значение), который мы распаковываем в две переменные min_index
и min_value
.max()
, передавая ей результат функции enumerate(numbers)
и ту же самую лямбда-функцию для поиска максимального значенияВ конце кода мы выводим на экран результаты, используя значения min_index
, min_value
, max_index
и max_value
:
Минимальное значение 1 находится на позиции 3 Максимальное значение 9 находится на позиции 4
Функцию enumerate()
легко можно использовать для обращения к информации из базы данных (БД).
Допустим, у нас есть БД с таблицей users
. Таблица включает информацию о пользователях с такими полями:
Мы можем получить данные из этой таблицы в виде списка кортежей и использовать enumerate()
для обхода каждого кортежа в списке и извлечения нужных данных по индексу:
import sqlite3 # подключаемся к базе данных conn = sqlite3.connect('example.db') # получаем курсор для выполнения запросов cur = conn.cursor() # получаем данные из таблицы users cur.execute("SELECT * FROM users") rows = cur.fetchall() # обходим каждый кортеж в списке rows, используя enumerate() for i, row in enumerate(rows): user_id = row[0] first_name = row[1] last_name = row[2] address = row[3] phone = row[4] # выводим данные на экран print(f"Пользователь {i+1}: {first_name} {last_name}, адрес: {address}, телефон: {phone}") # закрываем соединение с базой данных conn.close()
Код выше подключается к базе данных example.db
, получает все данные из таблицы users
, обходит каждый кортеж в списке rows
, извлекает нужные данные по индексу и выводит их на экран.
Допустим, вы работаете с компанией, данные о покупках в которой хранятся в CSV-файле. Каждая строка файла содержит информацию о конкретной покупке и включает:
Наша задача — это извлечь название товара и количество из каждой строки и вывести их на экран.
Для этой задачи удобно использовать функцию Python enumerate()
:
import csv with open('purchases.csv', newline='') as csvfile: reader = csv.reader(csvfile, delimiter=',') for i, row in enumerate(reader): name = row[1] quantity = int(row[3]) print(f"Покупка {i+1}: {name} ({quantity} шт.)")
В этом коде мы открываем файл purchases.csv с помощью модуля csv.reader()
, а затем используем функцию enumerate()
для обхода каждой строки файла.
csv.reader()
— это модуль Python, предназначенный для чтения данных из CSV-файлов. Он не только читает данные из файлов CSV, но и преобразовывает их в списки или кортежи Python. Также этот модуль содержит функции и методы для записи данных в CSV-файлы.
Мы извлекаем нужные данные по индексу (название товара находится во втором столбце, а количество — в четвертом), а затем выводим их на экран.
Внутри цикла мы также используем переменную i
, чтобы отслеживать порядковый номер каждой покупки и выводить его вместе с данными.
Функция enumerate()
может значительно упростить процесс итерации по данным и повысить читабельность кода. Она позволяет получать индексы и значения элементов из коллекций данных, таких как списки, кортежи и строки.
При использовании enumerate()
нужно учитывать некоторые ее особенности. Например, начальный индекс и использование распаковки кортежей.
Если использовать функцию enumerate()
вместе с циклом for
, каждый элемент итерируемой последовательности будет возвращаться как кортеж, состоящий из индекса элемента и самого элемента. Распаковка кортежа может быть использована, чтобы получить доступ к этим значениям отдельно.
Для закрепления изложенного материала предлагаем вам посмотреть видео, где рассказывается для чего нужна функция enumerate()
, а также объясняется как она используется в цикле for при переборе элементов итерируемых объектов:
Для обучения Python в совершенстве, рекомендуем рассмотреть профессиональные курсы. Если вы в Киеве, освоить профессию Python-разработчика можно в компьютерной академии IT Step.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…