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

Функція 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, кожен елемент ітерованої послідовності буде повертатися як кортеж, який складається з індексу елемента і самого елемента. Розпакування кортежу може бути використане, щоб отримати доступ до цих значень окремо.

Для вивчення Python досконало, рекомендуємо розглянути професійні курси. Якщо ви в Києві, опанувати професію Python-розробника можна в комп’ютерній академії IT Step.

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

Brave1 збільшив гранти для оборонних розробок: можна отримати до 2 млн гривень

Кластер Brave1 збільшує гранти для оборонних розробок — тепер можна отримати від 500 тис до…

10.05.2024

Softserve, Luxoft та Infopulse. З’явився рейтинг найбільших платників податків серед IT-компаній

За 2023 рік IT-компанії сплатили сплатили в державний бюджет 20,8 мільярда гривень податків. Це 7,4%…

10.05.2024

«За заслуги перед компанією»: Microsoft розморозить підвищення зарплат співробітникам

Корпорація Microsoft планує відновити підвищення зарплат для найбільш ефективних співробітників. Про це повідомив Insider. Вірогідне…

10.05.2024

Мінекономіки запустило пільгові гранти для виробників дронів

Міністерство економіки запропонувало виробникам дронів пільгові гранти від держави за програмою «Переробка». Про це йдеться…

09.05.2024

Дочекалися. В квітні попит на айтівців без досвіду був вищий, ніж на досвідчених фахівців

В квітні попит на недосвідчених айтівців був вищий, аніж на тих, хто має 3-4 роки…

09.05.2024

Dell буде відстежувати переміщення та присвоювати рейтинг «прогульникам» офісу

Американська компанія Dell після зміни політики щодо ремоуту посилює контроль за працівниками. Зокрема, відстежує фізичне…

09.05.2024