Função Python enumerate(), explicada com exemplos

Este tutorial ensinará como usar a função enumerate() em Python.

A função enumerate() em Python fornece uma sintaxe concisa para acessar os itens em um iterável junto com seus índices.

Começaremos revisando como acessar itens e índices usando looping simples e, em seguida, continuaremos a aprender a sintaxe da função enumerate() do Python. Também codificaremos exemplos ao longo do caminho.

Vamos começar.

Como iterar usando for Loop em Python

Qualquer objeto Python sobre o qual você possa iterar e acessar os itens individuais – um de cada vez é chamado de iterável. Portanto, listas, tuplas, dicionários e strings do Python são todos iteráveis.

Vamos dar um exemplo de uma lista de compras definida na célula de código abaixo.

shopping_list = ["fruits","cookies","cereals","protein bars","post-it notes"]

Em Python, você pode usar o loop for para percorrer qualquer iterável. A sintaxe para fazer isso é a seguinte:

for item in <iterable>:
    # do something on item

# item: looping variable
# <iterable>: any Python iterable: list, tuple, dictionary, string, and so on.

Agora, usando essa sintaxe, vamos percorrer a lista_compras e acessar os itens individuais.

for item in shopping_list:
  print(item)

# Output
fruits
cookies
cereals
protein bars
post-it notes

Essa construção ajuda você a acessar os itens diretamente. No entanto, às vezes você pode precisar acessar o índice dos itens, além dos próprios itens.

Você pode usar uma variável de índice, que pode ser incrementada dentro do corpo do loop, conforme mostrado abaixo:

index = 0
for item in shopping_list:
  print(f"index:{index}, {item}")
  index += 1

# Output
index:0, fruits
index:1, cookies
index:2, cereals
index:3, protein bars
index:4, post-it notes

Mas este não é o método mais eficiente. Se você não se lembrar de incrementar o índice, seu código não funcionará conforme o esperado.

index = 0
for item in shopping_list:
  print(f"index:{index}, {item}")
  # no update of index inside loop body
  # index is never updated and is always 0

# Output
index:0, fruits
index:0, cookies
index:0, cereals
index:0, protein bars
index:0, post-it notes

Outro padrão comum de usar o loop for é em conjunto com a função range(). Vamos aprender sobre isso na próxima seção.

  Corrigir o aplicativo Disney Plus Hotstar não carregando

Como usar a função range() para acessar o índice

A função len() integrada do Python retorna o comprimento de qualquer objeto Python. Então você pode chamar a função len() com shopping_list o argumento para obter o comprimento da shopping_list (que é 5, neste caso).

len(shopping_list)
# Output: 5

A função range() retorna um objeto range que você pode usar no loop. Quando você percorre range(stop), obtém os índices 0, 1, 2,…, stop-1.

Ao definir stop = len(list), você pode obter a lista de índices válidos. Assim, usando a função range(), você pode acessar o índice, bem como o item correspondente, conforme mostrado abaixo.

for index in range(len(shopping_list)):
  print(f"index:{index}, item: {shopping_list[index]}")

# Output
index:0, item: fruits
index:1, item: cookies
index:2, item: cereals
index:3, item: protein bars
index:4, item: post-it notes

No entanto, essa não é a maneira Pythonic recomendada para acessar índices e itens simultaneamente.

Sintaxe da função Python enumerate()

A função enumerate() do Python permite acessar os itens junto com seus índices usando a seguinte sintaxe geral:

enumerate(<iterable>, start = 0)

Na sintaxe acima:

  • é um parâmetro obrigatório e pode ser qualquer iterável do Python, como uma lista ou tupla.
  • start é um parâmetro opcional que controla o índice no qual a contagem começa. Se você não especificar o valor de início, o padrão será zero.

Agora você pode chamar a função enumerate() com shopping_list e ela retorna um objeto enumerate, conforme mostrado na célula de código abaixo.

enumerate(shopping_list)
<enumerate at 0x7f91b4240410>

Você não pode percorrer o objeto enumerate. Então vamos converter o objeto enumerate em uma lista Python.

list(enumerate(shopping_list))

# Output
[(0, 'fruits'),
 (1, 'cookies'),
 (2, 'cereals'),
 (3, 'protein bars'),
 (4, 'post-it notes')]

Outro método para acessar os itens do objeto enumerate é chamar o função seguinte() com o objeto enumerate como argumento. Em Python, a função next() retorna o próximo item de um iterador.

Internamente, a função next() funciona chamando o método __next__ no objeto iterador para recuperar os itens sucessivos.

Vamos atribuir o objeto enumerate à variável shopping_list_enum.

shopping_list_enum = enumerate(shopping_list)

Ao chamar next() pela primeira vez com shopping_list_enum, você obterá o índice zero e o item no índice 0: a tupla (0, ‘frutas’).

Ao continuar a fazer outras chamadas para a função next(), você obterá os itens sucessivos junto com seus índices, conforme descrito abaixo.

next(shopping_list_enum)
# (0, 'fruits')
next(shopping_list_enum)
# (1, 'cookies')
next(shopping_list_enum)
# (2, 'cereals')
next(shopping_list_enum)
# (3, 'protein bars')
next(shopping_list_enum)
# (4, 'post-it notes')

O que acontece se você chamar a função next() depois de acessar todos os itens e chegar ao final da lista? Você recebe um erro StopIteration.

next(shopping_list_enum)
# ---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-16-4220f68f6c7e> in <module>()
----> 1 next(shopping_list_enum)

StopIteration:

A função enumerate() retorna os índices e itens sucessivos somente quando necessário e não são computados antecipadamente. Em projetos Python em que você precisa levar em conta a eficiência da memória, você pode tentar usar a função enumerate() quando precisar percorrer iteráveis ​​grandes.

Exemplos de funções Python enumerate()

Agora que aprendemos a sintaxe para usar a função enumerate(), vamos modificar o loop for que tínhamos anteriormente.

Da seção anterior, sabemos que fazer um loop pelo objeto enumerate retorna uma tupla com o índice e o item. Podemos descompactar essa tupla em duas variáveis: índice e item.

for index, item in enumerate(shopping_list):
  print(f"index:{index}, item:{item}")

# Output
index:0, item:fruits
index:1, item:cookies
index:2, item:cereals
index:3, item:protein bars
index:4, item:post-it notes

Em seguida, vamos ver como especificar um valor inicial personalizado.

Como enumerar () com valor inicial personalizado

O Python segue a indexação zero, portanto, o valor inicial é 0 por padrão. No entanto, se você precisar dos índices em formato legível, começando em 1 ou qualquer outro índice de sua escolha, você pode especificar um valor inicial personalizado.

No exemplo da lista_compras, se você quiser começar a contar a partir de 1, defina start = 1.

for index, item in enumerate(shopping_list,1):
  print(f"index:{index}, item:{item}")

# Output
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

No entanto, ao especificar o valor inicial personalizado, certifique-se de especificá-lo como o segundo argumento posicional.

Se você trocar por engano a ordem do iterável e o valor inicial, você encontrará um erro, conforme explicado na célula de código abaixo.

for index, item in enumerate(1,shopping_list):
  print(f"index:{index}, item:{item}")

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-5dbf7e2749aa> in <module>()
----> 1 for index, item in enumerate(1,shopping_list):
      2   print(f"index:{index}, item:{item}")

TypeError: 'list' object cannot be interpreted as an integer

Para evitar esses erros, você pode especificar start como um argumento de palavra-chave, conforme mostrado abaixo.

for index, item in enumerate(shopping_list, start = 1):
  print(f"index:{index}, item:{item}")

# Output
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

Até agora, você aprendeu a usar a função enumerate() com listas do Python. Você também pode usar a função enumerate para percorrer strings, dicionários e tuplas do Python.

Como usar a função enumerate () com tuplas Python

Suponha que lista_compras seja uma tupla. Em Python, tuplas também são coleções — semelhantes às listas de Python, mas são imutáveis. Portanto, você não pode modificá-los e tentar fazer isso levará a um erro.

O trecho de código a seguir inicializa shopping_list como uma tupla.

shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes")
type(shopping_list)
# Tuple

Se você tentar modificar o primeiro item da tupla, receberá um erro, pois uma tupla do Python é uma coleção imutável.

shopping_list[0] = 'vegetables'

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-ffdafa961600> in <module>()
----> 1 shopping_list[0] = 'vegetables'

TypeError: 'tuple' object does not support item assignment

▶ Agora, execute o trecho de código a seguir para verificar se a função enumerate() funciona conforme o esperado com tuplas.

shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes")
for index, item in enumerate(shopping_list):
    print(f"index:{index}, item:{item}")

Como usar a função enumerate() com strings Python

Você também pode usar a função enumerate() do Python para percorrer strings e acessar os caracteres e índices simultaneamente.

Aqui está um exemplo.

py_str="Butterfly"
for index, char in enumerate(py_str):
  print(f"index {index}: {char}")

# Output
index 0: B
index 1: u
index 2: t
index 3: t
index 4: e
index 5: r
index 6: f
index 7: l
index 8: y

A partir da saída acima, vemos que os caracteres junto com seus índices (0-8) foram impressos.

Conclusão👩🏽‍💻

Aqui está um resumo do que você aprendeu.

  • Você pode usar loops for para acessar os itens e manter um contador ou variável de índice separada.
  • Se desejar, você pode usar a função range() para obter os índices válidos e acessar os itens indexando na lista.
  • Como uma maneira Pythonic recomendada, você pode usar a função enumerate() do Python com a sintaxe: enumerate(iterable). Por padrão, a contagem ou índice começa em 0.
  • Você pode especificar o valor inicial personalizado com a sintaxe enumerate(iterable, start) para obter o índice começando no valor inicial e os itens correspondentes.
  • Você pode usar a função enumerate ao trabalhar com tuplas, strings, dicionários e, em geral, qualquer iterável do Python.

Espero que você tenha achado este tutorial sobre a função enumerate() útil. Em seguida, aprenda como encontrar o índice de um item nas listas do Python. Continue codificando!