Рубріки: Теория

Функция enumerate() в Python

Сергій Бондаренко

Когда в работе приходится иметь дело со списками, кортежами или другими итерируемыми объектами, мы можем применять функцию enumerate() для добавления порядковых номеров элементов в итерации.

Что такое функция enumerate() в Python и для чего нужна

Функция enumerate() возвращает объект, который можно использовать для перечисления элементов итерируемого объекта вместе с их порядковыми номерами.

С помощью функции enumerate() можно выполнять такие действия:

  • Вести перечисление элементов. Можно легко перечислить элементы списка, кортежа или другого итерируемого объекта, присвоив им порядковые номера (например, при составлении таблицы).
  • Извлекать элементы. Используя функцию enumerate() с циклом for, можно получить доступ к элементам итерируемого объекта по их порядковому номеру.
  • Создавать словари. Можно создавать словари, используя порядковые номера элементов в качестве ключей.
  • Вести подсчет элементов. Можно подсчитать количество элементов в итерируемом объекте.

Синтаксис функции enumerate() в Python

Так как функция enumerate() позволяет перебирать элементы списка или другой итерируемой последовательности и возвращает индекс каждого элемента, синтаксис функции выглядит так:

enumerate(iterable, start=0)

В этой записи:

  • iterable — это итерируемая последовательность, которую нужно перебирать;
  • start — это необязательный параметр, который определяет начальное значение для счетчика индекса. По умолчаниюесли его не указывать параметр start равен 0.

При выполнении, функция enumerate() возвращает объект перечислителя, который содержит кортежи (индекс, значение) для каждого элемента в итерируемой последовательности. Индекс начинается с start и увеличивается на 1 для каждого последующего элемента.

Изучаешь Python самостоятельно и чувствуешь, что нужна помощь опытного ментора? Приходи на курсы Python Basic и Python Pro от Hillel и начни свой путь в IT.

Пример использования функции enumerate() для простого перебора элементов списка

Давайте рассмотрим простой пример перебора элементов списка. Допустим, у нас есть такой набор слов:

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, а не с 0 По умолчанию номера индексов идут с нуля.. Затем выводится значение каждого элемента списка words.

Результат работы программы:

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. Таблица включает информацию о пользователях с такими полями:

  • id;
  • имя;
  • фамилия;
  • адрес;
  • телефон.

Мы можем получить данные из этой таблицы в виде списка кортежей и использовать 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-файла

Допустим, вы работаете с компанией, данные о покупках в которой хранятся в CSV-файле. Каждая строка файла содержит информацию о конкретной покупке и включает:

  • id покупки;
  • название товара;
  • цену;
  • количество.

Наша задача — это извлечь название товара и количество из каждой строки и вывести их на экран.

Для этой задачи удобно использовать функцию 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.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023