Módulo 10 - Listas em Python

Percorrendo listas com for: visitar, somar e comparar

11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Percorrer uma lista com for item in lista, visitando cada item na ordem.
  • Exibir itens numerados usando enumerate, sem gambiarras de contador.
  • Somar todos os valores e achar o maior usando acumulador e comparação.
  • Conhecer sum() e max(), as versões prontas que o Python oferece.

for item in lista: o par perfeito

No módulo 9 o for repetia ações com range, contando números. A vocação verdadeira dele, porém, é esta: percorrer coleções. A escrita for fruta in frutas se lê como português, para cada fruta na lista de frutas, e faz exatamente o que diz: a cada volta do loop, a variável fruta recebe o próximo item, do primeiro ao último, sem você administrar índice nenhum. Sem range, sem len, sem risco de IndexError.

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

for fruta in frutas:
    print(f"Comprar: {fruta}")

# Saída:
# Comprar: maçã
# Comprar: banana
# Comprar: laranja

O for visita cada item na ordem. A variável fruta é criada pelo próprio loop e muda a cada volta.

O nome da variável do loop é escolha sua, e a boa prática é o singular do nome da lista: fruta em frutas, nota em notas, convidado em convidados. O código vira uma frase que qualquer pessoa lê. E tudo que você aprendeu de for continua valendo aqui: o corpo indentado executa uma vez por item, e dentro dele cabem if, contas e até outros appends em outra lista.

Numerando com enumerate, com calma

Cedo ou tarde aparece a necessidade de mostrar a POSIÇÃO junto com o item: uma lista de compras numerada, um ranking, um menu de opções. O for sozinho entrega só o item; a posição fica escondida. Para esses casos o Python oferece a função enumerate, que embrulha a lista e entrega, a cada volta, um par: a posição e o item. A escrita usa duas variáveis antes do in, separadas por vírgula. Vamos por partes, porque a primeira vista assusta um pouco.

compras = ["arroz", "feijão", "café"]

for i, item in enumerate(compras):
    print(f"{i} - {item}")

# Saída:
# 0 - arroz
# 1 - feijão
# 2 - café

enumerate entrega posição e item juntos: i recebe o índice, item recebe o valor. Duas variáveis, uma vírgula.

Leia a linha do for devagar: para cada PAR posição-e-item na lista enumerada, guarde a posição em i e o item em item. Só isso. Repare que a numeração saiu 0, 1, 2, porque enumerate usa os índices reais da lista, e índice começa em zero, como você bem sabe. Só que pessoas contam do 1: ninguém quer ver item 0 - arroz numa lista de compras. A solução é o ajuste start=1, que manda o enumerate começar a contagem do 1, sem mudar a lista em nada.

compras = ["arroz", "feijão", "café"]

for i, item in enumerate(compras, start=1):
    print(f"{i} - {item}")

# Saída:
# 1 - arroz
# 2 - feijão
# 3 - café

Com start=1, a numeração fica amigável para humanos. Este é o formato do menu da prática, na aula 7.

Somar tudo e achar o maior: na mão e com atalho

Hora de pagar a promessa da aula 1: a média das notas. O ingrediente é o padrão acumulador, parente do que você viu no módulo do while: uma variável total começa em zero e, a cada volta do for, recebe ela mesma mais a nota da vez. No fim do loop, total guarda a soma de tudo, e a média é a soma dividida pelo len. Para achar a MAIOR nota, a mesma ideia com uma comparação: guarde a primeira nota como campeã provisória e, a cada volta, se a nota da vez for maior, ela assume o posto.

notas = [7.5, 8.0, 6.5, 9.0, 7.0]

total = 0
for nota in notas:
    total = total + nota      # acumula a soma

maior = notas[0]              # a primeira é a campeã provisória
for nota in notas:
    if nota > maior:
        maior = nota          # destronada: a nota da vez é maior

print(f"Média: {total / len(notas)}")   # Saída: Média: 7.6
print(f"Maior nota: {maior}")            # Saída: Maior nota: 9.0

Os dois clássicos na mão: acumulador para a soma, campeão provisório para o maior. Leia linha a linha.

Agora, a honestidade de sempre: o Python já tem isso pronto. sum(notas) devolve a soma, max(notas) o maior, min(notas) o menor. Uma linha cada. E então, por que a aula fez você suar na versão manual? Porque quem só conhece o atalho não sabe o que fazer quando o problema muda de forma: some só as notas acima de 7, ache o maior nome em ordem alfabética com desempate, conte quantos passaram. O sum não resolve essas variações; o padrão acumulador resolve todas. Você aprendeu o motor; o atalho é o câmbio automático.

notas = [7.5, 8.0, 6.5, 9.0, 7.0]

print(sum(notas))               # Saída: 38.0
print(max(notas))               # Saída: 9.0
print(min(notas))               # Saída: 6.5
print(sum(notas) / len(notas))  # Saída: 7.6  (a média, em uma linha)

As versões prontas: sum, max e min. Use sem culpa agora que você sabe o que elas fazem por dentro.

Teste rápido

O que imprime este código? valores = [3, 8, 5] total = 0 for v in valores: total = total + v print(total)

Perguntas frequentes

Posso alterar os itens da lista de dentro do for?
Alterar a variável do loop (como fruta) não muda a lista: ela é uma cópia do item da vez. Para alterar de verdade, use o índice via enumerate: for i, nota in enumerate(notas): notas[i] = nota + 1. E evite adicionar ou remover itens da lista enquanto a percorre; isso bagunça a visita.
sum() funciona com lista de textos?
Não: sum é para números e gera TypeError com strings. Para juntar textos de uma lista numa frase, o Python usa o método join, como ", ".join(frutas), que aparece em código por aí. Já max e min funcionam com textos, comparando por ordem alfabética.
O que acontece se eu usar max() numa lista vazia?
ValueError: max() arg is an empty sequence. Não existe maior item do nada. O sum, curiosamente, aceita lista vazia e devolve 0. Se a lista pode estar vazia no seu programa, confira antes com if lista.
Por que aprender a versão manual se sum() e max() existem?
Porque o padrão acumulador se adapta a qualquer variação (somar só os aprovados, contar os maiores que X, achar o segundo maior) e os atalhos não. Além disso, entrevistas e provas de lógica cobram a versão manual exatamente para ver se você entende o mecanismo, não só a API.
Qual a diferença entre for item in lista e for i in range(len(lista))?
Os dois visitam todos os itens, mas o primeiro entrega o item direto e o segundo entrega só o índice, obrigando você a escrever lista[i] dentro do loop. Em Python, a forma direta é a preferida por ser mais legível; quando precisar do índice TAMBÉM, o enumerate cobre o caso.
O enumerate com start=1 muda os índices reais da lista?
Não muda nada na lista: o start=1 só desloca o número que o enumerate entrega para exibição. O item continua no índice real dele; se for usar o número para acessar ou remover (lista[n]), lembre de subtrair 1. Essa continha aparece na prática da aula 7.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.