Коли в роботі доводиться мати справу зі списками, кортежами або іншими ітерованими об’єктами, ми можемо застосовувати функцію 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
, кожен елемент ітерованої послідовності буде повертатися як кортеж, який складається з індексу елемента і самого елемента. Розпакування кортежу може бути використане, щоб отримати доступ до цих значень окремо.
Для вивчення Python досконало, рекомендуємо розглянути професійні курси. Якщо ви в Києві, опанувати професію Python-розробника можна в комп’ютерній академії IT Step.
Вчені Стенфордського університету (США) провели дослідження на тему віддаленої роботи у 40 країнах світу. Як…
Зараз у пошуку роботи перебуває 13% українських розробників. Водночас, серед тих наших співвітчизників-програмістів, хто зараз…
Дослідник кібербезпеки Гільєрме Рамбо розкрив, як один рядок коду міг перевести будь-який iPhone в режим…
Відповідно до внутрішніх даних, оприлюднених у суді, Gemini вже має 350 млн активних користувачів, повідомило…
Резидент Дія.City GoIT запустив першу онлайн-магістратуру зі штучного інтелекту. Про це повідомив віцепрем'єр-міністр — міністр цифрової трансформації…
Meta скорочує персонал у своєму підрозділі Reality Labs, який виготовляє гарнітури змішаної реальності Quest і…