Enumerate python 3 пример

Как работает функция enumerate() в Python?

В данной статье мы бы хотели разобрать, как работает функция enumerate() в Python. Сначала мы рассмотрим её синтаксис и принцип работы, а дальше потренируемся на примерах, чтобы научиться использовать данную функцию на практике.

Итак, функция enumerate() в Python принимает некий набор данных в качестве параметра и возвращает объект enumerate.

Этот объект возвращается в формате пар ключ-значение, где ключи — это соответствующие индексы элементов, а значения — сами элементы из переданного набора данных.

Но давайте сперва поговорим о синтаксисе и параметрах функции enumerate().

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

Синтаксис функции enumerate() выглядит следующим образом:

Функция enumerate() принимает два параметра: iterable и start .

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

Как использовать функцию enumerate() в Python

В этом разделе мы рассмотрим несколько примеров, которые помогут нам понять синтаксис и параметры, разобранные в предыдущем разделе.

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

Пример №1: функция enumerate() с одним параметром

names = ["John", "Jane", "Doe"] enumNames = enumerate(names) print(list(enumNames)) # [(0, 'John'), (1, 'Jane'), (2, 'Doe')]

В приведенном выше примере мы создали список, состоящий из трех имен.

Затем мы преобразовали переменную names в объект enumerate и сохранили результат в переменной с именем enumNames .

Читайте также:  Стили

Далее мы захотели, чтобы наш объект был выведен в виде списка, поэтому мы сделали следующее: list(enumNames) .

При выводе на консоль результат будет выглядеть так: [(0, ‘John’), (1, ‘Jane’), (2, ‘Doe’)] .

Как видите, результат мы получили в виде пар ключ-значение. Первый индекс — 0, он связан с первым элементом в нашем списке имен names , второй — 1, связан со вторым элементом в списке names и так далее.

Обратим внимание, что в нашем примере мы использовали только первый параметр функции enumerate().

В следующем примере мы используем оба параметра, чтобы вы увидели разницу.

Пример №2: функция enumerate() с указанием начального индекса

names = ["John", "Jane", "Doe"] enumNames = enumerate(names, 10) print(list(enumNames)) # [(10, 'John'), (11, 'Jane'), (12, 'Doe')]

Здесь мы добавили второй параметр в функцию enumerate() , написав enumerate(names, 10) .

Значение второго параметра, 10, будет начальным индексом для ключей (индексов) в объекте enumerate.

Результат будет таким: [(10, ‘John’), (11, ‘Jane’), (12, ‘Doe’)] .

Мы видим, что первый индекс равен 10, второй 11 и так далее. Таким образом, с помощью второго аргумента start мы можем установить любой начальный индекс для наших элементов.

Как перебрать результат функции enumerate() в Python

Вот простой пример, показывающий, как мы можем перебирать полученный в результате объект enumerate:

names = ["John", "Jane", "Doe"] enumNames = enumerate(names) for item in enumNames: print(item) # (0, 'John') # (1, 'Jane') # (2, 'Doe')

Используя цикл for , мы прошлись по нашему объекту с помощью следующей команды: for item in enumNames . Подробнее про тонкости использования цикла for можете узнать в статье «Цикл for в Python: тонкости написания».

На выходе мы получили элементы исходного объекта, выведенные в формате пар ключ-значение.

Заключение

Итак, в этой статье мы поговорили о том, как работает функция enumerate() в Python. Мы начали с рассмотрения синтаксиса и параметров этой функции, затем разобрали несколько примеров ее использования.

Читайте также:  Home modules php name

Наконец, мы увидели, как можно перебирать вывод функции enumerate() с помощью цикла for .

Надеемся, данная статья была вам полезна! Успехов в написании кода!

Источник

Функция enumerate

В Python есть еще одна встроенная функция, которая часто используется в заголовке for . Это функция enumerate() . Если range() позволяет получить только индексы элементов списка, то enumerate() – сразу индекс элемента и его значение.

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

>>> spisok = [16, 46, 26, 36] >>> for i in enumerate(spisok): . print(i) . (0, 16) (1, 46) (2, 26) (3, 36)
>>> b = "hello" >>> for i in enumerate(b): . print(i) . (0, 'h') (1, 'e') (2, 'l') (3, 'l') (4, 'o')

Эти кортежи можно распаковывать, то есть извлекать индекс и значение, в теле цикла:

>>> for item in enumerate(spisok): . print(item[0], item[1]) . 0 16 1 46 2 26 3 36

Однако чаще это делают еще в заголовке for , используя две переменные перед in :

>>> for id, val in enumerate(spisok): . print(id, val) . 0 16 1 46 2 26 3 36

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

>>> a = [10, 20, 30, 40] >>> for id, item in enumerate(a): . a[id] = item + 5 . >>> a [15, 25, 35, 45]

В данном случае на каждой итерации цикла из объекта, полученного от вызова функции enumerate , извлекается очередной кортеж. Этот кортеж состоит из индекса очередного элемента списка и значения этого элемента. Элементы кортежа связываются с идентификаторами id и item .

Без использования enumerate в цикл пришлось бы вводить переменную-счетчик:

>>> a = [10, 20, 30, 40] >>> # используется счетчик >>> for num in a: . a[id] = num + 5 . id += 1 . >>> a [15, 25, 35, 45]

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

>>> a = [10, 20, 30, 40] >>> for i in range(len(a)): # перебор по индексам . a[i] += 5 . >>> a [15, 25, 35, 45]

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

Читайте также:  Java методы интерфейса по умолчанию

Если enumerate() так хороша, зачем использовать range() в заголовке for ? На самом деле незачем, если только вам так не проще. Кроме того, бывают ситуации, когда значения не нужны, нужны только индексы. Однако следует учитывать один нюанс. Функция enumerate() возвращает так называемый объект-итератор. Когда такие объекты сгенерировали значения, то становятся «пустыми». Второй раз по ним пройтись нельзя.

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

Когда range() и enumerate() используются в заголовке for , то разницы нет, так как range- и enumerate-объекты не присваиваются переменным и после завершения работы цикла теряются. Но если мы присваиваем эти объекты переменным, их отличия могут сказаться на выполнении программы:

>>> nums = [34, 15, 124, 800, 339] >>> >>> r_obj = range(len(nums)) >>> e_obj = enumerate(nums) >>> >>> for i in r_obj: . print(i) . if i == 1: . break . 0 1 >>> for i in r_obj: . print(nums[i]) . if i == 1: . break . 34 15 >>> for i, v in e_obj: . print(v) . if i == 1: . break . 34 15 >>> for i in r_obj: . print(nums[i]) . 34 15 124 800 339 >>> for i, v in e_obj: . print(v) . 124 800 339

Сначала мы прерываем извлечение элементов из объектов на элементе с индексом 1. Когда снова прогоняем объекты через цикл for , то в случае r_obj обход начинается сначала, а в случае e_obj продолжается после места останова. Объект e_obj уже не содержит извлеченных ранее элементов.

Практическая работа

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

Примеры решения и дополнительные уроки в pdf-версии курса

Python. Введение в программирование

Источник

Оцените статью