Como usar a função enumerate em Python

Última atualização
30 dez 2025
Tempo de leitura
7 min
Como usar a função enumerate em Python

Neste guia, você verá o que a função enumerate faz, quando usá-la na prática, como funciona sua sintaxe, exemplos comuns de uso e os principais erros que devem ser evitados.

Python para Análise de Dados

Economize R$320 na compra do seu curso. Use o código copied blog2025 e comece a aprender!

Aprenda uma das linguagens de programação mais versáteis e acessíveis da área de analytics e manuseie, de forma automatizada, grandes quantidades de dados. Com esta ferramenta poderosa você irá agilizar seu trabalho, integrar seus sistemas e processar dados mais rapidamente e em diferentes formatos.

2 meses
12x de
R$ 145,00
(parcelas sem juros no cartão de crédito)
Investimento pelo curso completo
R$ 1.740
R$ 2.900
Inscreva-se no curso

A função enumerate é uma das formas mais simples e idiomáticas de obter, ao mesmo tempo, o item de um iterável e a sua posição durante um laço for . Ela elimina a necessidade de contadores manuais e evita o uso excessivo de range(len(...)) , tornando o código mais legível e menos propenso a erros.

O que faz a função enumerate em Python?

A função enumerate(iterável, start=0) cria um iterador que retorna pares no formato (índice, item) a cada iteração. Esse índice é gerado automaticamente e começa, por padrão, em zero.

frutas = ["maçã", "banana", "uva"]

for i, fruta in enumerate(frutas):

print(i, fruta)

Saída:
0 maçã
1 banana
2 uva

Na prática, enumerate funciona como um contador acoplado ao laço, sincronizado com o iterável. O Python cuida da contagem e da associação entre posição e valor.

Para que serve a função enumerate na prática

O uso de enumerate é indicado sempre que a lógica do laço depende tanto do valor quanto da sua posição. Isso ocorre com frequência em tarefas simples do dia a dia.

Um exemplo comum é numerar linhas de um arquivo ou saída para usuários, usando contagem iniciada em 1:

for linha, texto in enumerate(arquivo, start=1):

print(f"{linha:>4}: {texto.rstrip()}")

 

Outro uso recorrente é atualizar uma lista “no lugar”, sem recorrer a range(len(...)) :

nums = [10, 20, 30]
for i, n in enumerate(nums):
nums[i] = n * 2
# [20, 40, 60]

 

Também é útil para gerar rótulos que dependem da posição:

etiquetas = [f"{i}: {v}" for i, v in enumerate(["A", "B", "C"], start=1)]
# ['1: A', '2: B', '3: C']

 

E para iterar dicionários mantendo um contador explícito:

precos = {"arroz": 22.9, "feijão": 8.5, "óleo": 6.7}

for i, (produto, valor) in enumerate(precos.items(), start=1):

print(i, produto, valor)

 

Em quais tipos de iteráveis funciona

A função enumerate funciona com qualquer objeto iterável, incluindo listas, tuplas, strings, range , arquivos, geradores e métodos como dict.items() .

Algumas observações importantes ajudam a evitar confusão:

  • Em dicionários, use .items() se precisar acessar chave e valor juntos.
  • Em conjuntos ( set ), a enumeração funciona, mas a ordem não é garantida.
  • Em arquivos, enumerate é especialmente eficiente, pois o iterador é preguiçoso e não carrega tudo em memória.

Quando evita código verboso

Um dos maiores benefícios do enumerate é substituir padrões mais longos e frágeis.

Em vez de:

# Verboso, sujeito a off-by-one e repetição de indexação

for i in range(len(seq)):

valor = seq[i]

...

Prefira:

for i, valor in enumerate(seq):

...

Esse padrão é mais legível, reduz erros de índice e funciona até mesmo com iteráveis que não suportam indexação direta.

Quando a contagem precisa ser “humana”, basta definir o ponto inicial:

 

for valor in seq: ou for _, valor in enumerate(seq): (melhor ainda, sem enumerate ).

  • Com dicionários, pegue chave e valor:
    for i, (k, v) in enumerate(meu_dict.items(), 1): ...
  • Evite mudar o tamanho da lista durante a iteração. Atualizar “no lugar” (reatribuir seq[i] ) é ok; inserir/remover não.

Sintaxe, parâmetros e retorno

A assinatura da função é simples:

enumerate(iterável, start=0)

O primeiro parâmetro é qualquer iterável. O segundo, opcional, define o valor inicial do índice.

O retorno é um objeto do tipo enumerate , que é um iterador. Isso significa que ele é consumido durante a iteração e não pode ser reutilizado sem ser recriado.

Exemplos rápidos

list(enumerate("abc"))
# [(0, 'a'), (1, 'b'), (2, 'c')]

list(enumerate(range(3), start=10))
# [(10, 0), (11, 1), (12, 2)]

Quando usar enumerate

Use enumerate quando a posição do item é relevante para a lógica do código. Isso inclui numeração de saídas, atualização de listas, geração de mensagens de erro com contexto ou interrupção do laço ao encontrar uma condição específica.

for i, v in enumerate(valores, start=1):

if v > 100:

print(f"Primeiro acima de 100: posição {i}, valor {v}")

break

Evite enumerate quando o índice não é usado. Nesses casos, um for simples é mais claro. Também tenha cautela ao usá-lo com estruturas sem ordem previsível, como set.

Exemplos práticos com enumerate

Numeração de linhas de um arquivo com contagem humana (começando em 1):

with open("logs.txt", encoding="utf-8") as f:

for linha, texto in enumerate(f, start=1):

print(f"{linha:>4}: {texto.rstrip()}")

Atualização “no lugar” sem range(len(...)) :

notas = [7.5, 8.0, 6.0]

for i, n in enumerate(notas):

notas[i] = min(n + 0.5, 10.0)

print(notas) # [8.0, 8.5, 6.5]

Encontrar a primeira ocorrência que atende a uma condição e capturar a posição:

valores = [12, 5, 3, 27, 9]

posicao_primeiro_maior_10 = None

 

for i, v in enumerate(valores):

if v > 10:

posicao_primeiro_maior_10 = i

break

print(posicao_primeiro_maior_10) # 0

# (Alternativa concisa: next((i for i, v in enumerate(valores) if v > 10), None))

Rotular itens com posição em relatórios e interfaces:

opcoes = ["Básico", "Padrão", "Premium"]

rotulos = [f"{i}. {nome}" for i, nome in enumerate(opcoes, start=1)]

print(rotulos) # ['1. Básico', '2. Padrão', '3. Premium']

Iterar dicionários preservando a ordem de iteração e exibindo um contador:

precos = {"arroz": 22.9, "feijão": 8.5, "óleo": 6.7}

for i, (produto, valor) in enumerate(precos.items(), start=1):

print(f"{i} — {produto}: R$ {valor:.2f}")

Sincronizar índice com múltiplas coleções (útil em logs e validações):

usuarios = ["Ana", "Bruno", "Clara"]

perfis = ["admin", "editor", "viewer"]

ativos = [True, False, True]

 

for i, (u, p, a) in enumerate(zip(usuarios, perfis, ativos), start=1):

status = "ativo" if a else "inativo"

print(f"{i:02d} | {u:<5} | {p:<6} | {status}")

Filtrar por posição (pares/ímpares) sem criar índices manualmente:

dados = ["a", "b", "c", "d", "e"]

pares = [v for i, v in enumerate(dados) if i % 2 == 0] # posições 0,2,4

print(pares) # ['a', 'c', 'e']

Adicionar um campo id sequencial a registros já existentes:

registros = [{"nome": "Ana"}, {"nome": "Bruno"}, {"nome": "Clara"}]

for i, registro in enumerate(registros, start=1):

registro["id"] = i

print(registros)

# [{'nome': 'Ana', 'id': 1}, {'nome': 'Bruno', 'id': 2}, {'nome': 'Clara', 'id': 3}]

Esses padrões cobrem o uso diário de enumerate : leitura clara, menos código cerimonial e índices sempre sincronizados com os itens.

Erros comuns

Alguns erros aparecem com frequência e comprometem a clareza ou a segurança do código.

O mais comum é usar range(len(seq)) sem necessidade, tornando o código mais longo e sujeito a falhas. Outro erro recorrente é esquecer o parâmetro start=1 quando a numeração é exibida para usuários finais.

Também é comum tentar desempacotar chave e valor diretamente ao enumerar um dicionário sem usar .items() , confiar em ordem estável ao enumerar conjuntos ou modificar o tamanho de uma lista durante a iteração.

Além disso, enumerate não deve ser reutilizado após ser consumido, pois se trata de um iterador. E o índice retornado nunca deve ser tratado como identificador persistente.

Conclusão

A função enumerate é a forma idiomática em Python de combinar posição e valor em um mesmo laço. Ela reduz código cerimonial, melhora a legibilidade e diminui erros comuns de indexação. Funciona com qualquer iterável, permite ajustar o ponto inicial da contagem e se integra naturalmente ao estilo da linguagem.

Sempre que a lógica exigir o item e a sua posição, enumerate deve ser a primeira opção. Evite usá-la quando o índice não é necessário e mantenha atenção às estruturas sem ordem garantida. Com esses cuidados, a função se torna uma aliada constante na escrita de código mais limpo e confiável.

Página inicial / Programação & Dados
Equipe EBAC

O conteúdo

Python para Análise de Dados

Economize R$320 na compra do seu curso. Use o código copied blog2025 e comece a aprender!

Aprenda uma das linguagens de programação mais versáteis e acessíveis da área de analytics e manuseie, de forma automatizada, grandes quantidades de dados. Com esta ferramenta poderosa você irá agilizar seu trabalho, integrar seus sistemas e processar dados mais rapidamente e em diferentes formatos.

2 meses
12x de
R$ 145,00
(parcelas sem juros no cartão de crédito)
Investimento pelo curso completo
R$ 1.740
R$ 2.900
Inscreva-se no curso
Cadastre-se Cadastre-se Cadastre-se Cadastre-se Cadastre-se

Artigos Relacionados

30 dez 2025
5 min
Como usar a função join em Python

Neste guia, você vai entender o que é a função join, como funciona sua sintaxe, quando usá-la no dia a dia, exemplos práticos e os erros mais comuns que devem ser evitados.

30 dez 2025
5 min
29 dez 2025
5 min
Como criar um clássico “Hello world!” em JavaScript

Um guia prático para validar seu ambiente, entender onde o JavaScript roda e dar o primeiro passo com exemplos simples e erros comuns explicados.

29 dez 2025
5 min
Kotlin vs Java: Qual é a diferença?

Se você está começando no mundo da programação para Android ou quer entender qual linguagem escolher para os seus projetos, provavelmente já se perguntou: Kotlin ou Java? Ambas são usadas no desenvolvimento para a plataforma Android, mas possuem diferenças importantes que afetam a produtividade, segurança e desempenho. Vamos entender estas diferenças para que você possa tomar a melhor decisão.

05 maio 2025
14 min
WordPress: O que é e como funciona — Um guia completo

Se você acha que WordPress é só para blogs amadores, prepare-se para mudar de ideia. Esta plataforma é a base de milhões de sites no mundo – de pequenos negócios a gigantes como Sony e The New Yorker. Neste artigo, você vai entender como o WordPress funciona, o que é possível criar com ele e por que tantas empresas confiam nessa tecnologia. Vamos explorar seus recursos, plugins essenciais e até exemplos de sites famosos que usam esta ferramenta. Se você quer construir um site profissional, rápido e funcional, este guia vai te mostrar como.

05 maio 2025
13 min
Como Aprender a Programar e Conseguir um Emprego como Programador?

Você já pensou em trabalhar em qualquer lugar do mundo, ganhar um bom salário e ter uma carreira com alta demanda? A programação oferece tudo isto e muito mais. Com a tecnologia evoluindo a cada dia, empresas de todos os setores precisam de profissionais que saibam desenvolver softwares, sites e aplicativos. Mas por onde começar? Como aprender a programar e conseguir um emprego? Neste guia, vamos mostrar o que faz um programador, onde ele pode trabalhar e como ingressar nessa área promissora.

05 maio 2025
7 min
O que é Regressão Logística?

Imagine que você precisa prever se um cliente comprará um produto, se um paciente tem risco de desenvolver uma doença ou se um e-mail é spam. Como transformar dados em respostas objetivas? A regressão logística faz exatamente isto. Ela não apenas fornece previsões, mas atribui probabilidades a cada resultado, tornando a tomada de decisão mais precisa. Neste artigo, você vai entender como esse modelo funciona, as suas aplicações práticas em diferentes setores e como analisá-lo corretamente.

05 maio 2025
15 min