Функция enumerate() в Python: как упростить циклы с помощью счетчиков

    Команда Simple-Server
    03.06.2026
    5 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Что такое функция enumerate?

    enumerate — это встроенная функция в Python, которая принимает объект (например, список, строку или кортеж) и возвращает итератор (объект, который позволяет перебирать элементы коллекции), состоящий из кортежей. Каждый кортеж содержит индекс элемента и сам элемент из переданной последовательности.

    Преимущества использования enumerate

    1. Читаемость : Код становится чище и понятнее.
    2. Меньше ошибок : Нет необходимости вручную управлять индексами.
    3. Универсальность : Работает с любыми итерируемыми объектами.
    4. Гибкость стартового индекса : Можно указать начальное значение индекса через параметр start (по умолчанию 0).

    Синтаксис функции enumerate

    Синтаксис функции следующий:

    enumerate(iterable, start=0)
    • iterable — любой итерируемый объект (список, строка, кортеж и т.д.).

    • start — начальное значение счетчика (по умолчанию 0).

    iterable — любой итерируемый объект (список, строка, кортеж и т.д.).

    start — начальное значение счетчика (по умолчанию 0).

    Функция возвращает итератор, который можно использовать в цикле for или преобразовать в список с помощью оператора list().

    Рассмотрим использование enumerate на практическом примере. Предположим, у нас есть список имен, и мы хотим вывести их с номерами:

    names = ['Александр', 'Дмитрий', 'Евгений'] for index, name in enumerate(names): print(f"{index + 1}. {name}")

    Результат выполнения функции:

    1. Александр 2. Дмитрий 3. Евгений

    Здесь enumerate возвращает пары (index, name), где index — это номер элемента в списке, а name — сам элемент.

    С технической точки зрения, функцию enumerate можно представить как генератор последовательности кортежей:

    [(0, 'Александр'), (1, 'Дмитрий'), (2, 'Евгений')]

    Цикл for автоматически распаковывает каждый кортеж в переменные index и name.

    Зачем использовать enumerate

    До появления функции enumerate для перебора элементов с индексами обычно использовали конструкцию с циклом for, range() и функцией len():

    names = ['Александр', 'Дмитрий', 'Евгений'] for i in range(len(names)): print(f"{i + 1}. {names[i]}")

    Код выше работает, однако он менее читаем и требует ручного управления переменной i, что неудобно и увеличивает вероятность ошибки (например, можно забыть указать оператор i += 1). enumerate делает то же самое, но удобнее и понятнее.

    Использование функции enumerate на практике

    Рассмотрим несколько практических примеров использования функции enumerate.

    Изменение элементов списка по индексу

    Бывают случаи, когда нужно изменить элементы списка, основываясь на их индексах. Например, добавим префикс «город» к элементам с четными индексами:

    cities = ['Москва', 'Санкт-Петербург', 'Екатеринбург', 'Новосибирск'] for index, city in enumerate(cities): if index % 2 == 0: cities[index] = f"город-{city}" print(cities)

    Результат выполнения функции:

    ['город-Москва', 'Санкт-Петербург', 'город-Екатеринбург', 'Новосибирск']

    Использование метода start

    Метод start позволяет задать начальное значение индекса. Например, если нужно начать нумерацию с 1:

    algorithm = ['создать файл', 'написать код', 'запустить файл'] for index, task in enumerate(algorithm, start=1): print(f"Порядок действий {index}: {task}")

    Результат выполнения функции:

    Порядок действий 1: создать файл Порядок действий 2: написать код Порядок действий 3: запустить файл

    Создание словаря из списка

    Функцию enumerate удобно использовать для создания словарей, где ключи — это индексы или их производные. На практике это выглядит следующим образом:

    cars = ['BMW', 'Audi', 'Mercedes'] cars_dictionary = {f"Автомобиль {index}": value for index, value in enumerate(cars, start=1)} print(cars_dictionary)

    Результат выполнения функции:

    {'Автомобиль 1': 'BMW', 'Автомобиль 2': 'Audi', 'Автомобиль 3': 'Mercedes'}

    enumerate также полезен при работе со строками. Например, найдем позиции всех гласных букв, которые перечислены в переменной vowels, для строки «Доброе утро, мир!»:

    text = "Доброе утро, мир!" vowels = 'аеиоуыэюя' for index, char in enumerate(text): if char.lower() in vowels: print(f"Гласная '{char}' найдена на позиции {index}")

    Результат выполнения функции:

    Гласная 'о' найдена на позиции 1 Гласная 'о' найдена на позиции 4 Гласная 'е' найдена на позиции 5 Гласная 'у' найдена на позиции 7 Гласная 'о' найдена на позиции 10 Гласная 'и' найдена на позиции 14

    Что выбрать: enumerate или range(len())?

    При работе с циклами в Python может возникнуть вопрос: что выбрать — функцию enumerate() или функцию range()? В большинстве случаев предпочтение следует отдавать enumerate().

    enumerate следует концепции Pythonic. Она описывает код, который не просто работает на Python, но и написан в духе этого языка, следует его философии и использует его идиомы максимально эффективно и элегантно. Использование enumerate делает код более читаемым и эффективным. Используйте ее, когда вам нужно получить и элемент, и его индекс.

    range(len()) — это антипаттерн при использовании в большинстве сценариев. Его применение может быть оправдано только в очень специфических случаях, когда вам нужно получить лишь индекс для работы с другим списком такой же длины и при этом вам не требуется получать сам элемент исходного списка.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны