Iterar sobre Listas
Aprenda a percorrer listas em Python com for, while, enumerate(), zip(), break, continue e compreensões de lista, com exemplos práticos.
Percorrer uma lista — visitando cada item um por um — é uma das operações mais comuns em Python. Este capítulo aborda todas as formas práticas de fazer isso: loops for, loops while, enumerate(), zip(), break e continue, e compreensões de lista. Também explica as armadilhas a evitar ao modificar uma lista durante a iteração.
Por que percorrer uma lista?
Uma lista Python contém uma sequência ordenada de itens. Os loops permitem agir sobre cada item sem escrever uma linha de código por item. Seja somando preços, filtrando registros ou transformando strings, um loop geralmente é a ferramenta certa.
Iterando com um loop for
A forma mais simples e legível de iterar sobre uma lista é o loop for.
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit)apple
banana
cherryPython atribui cada item a fruit por vez, executa o bloco indentado e passa para o próximo item. O loop para automaticamente quando a lista se esgota — sem necessidade de gerenciar índices.
Iterando com range() e um índice
Quando você precisa tanto do índice quanto do valor, pode combinar range() com len():
colors = ['red', 'green', 'blue']
for i in range(len(colors)):
print(i, colors[i])0 red
1 green
2 blueIsso funciona, mas enumerate() (abordado a seguir) é mais elegante para esse padrão.
Iterando com enumerate()
enumerate() emparelha cada item com seu índice e é a abordagem idiomática em Python quando você precisa de ambos:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(index, fruit)0 apple
1 banana
2 cherryVocê pode iniciar o contador em um número diferente passando um segundo argumento:
for index, fruit in enumerate(['apple', 'banana', 'cherry'], start=1):
print(index, fruit)1 apple
2 banana
3 cherryIterando sobre duas listas com zip()
zip() emparelha itens de duas (ou mais) listas para que você possa iterá-las lado a lado:
names = ['Alice', 'Bob', 'Carol']
scores = [92, 85, 78]
for name, score in zip(names, scores):
print(name, '->', score)Alice -> 92
Bob -> 85
Carol -> 78Se as listas tiverem comprimentos diferentes, zip() para na lista mais curta. Use itertools.zip_longest() se precisar continuar até o final da lista mais longa.
Iterando com um loop while
Um loop while continua executando enquanto uma condição for True. Você gerencia o índice manualmente:
numbers = [10, 20, 30, 40, 50]
i = 0
while i < len(numbers):
print(numbers[i])
i += 110
20
30
40
50Loops while são úteis quando a condição de parada não é simplesmente "fim da lista" — por exemplo, ao buscar um item e parar assim que ele for encontrado.
Controlando a execução do loop
break — Sair antecipadamente
break interrompe o loop imediatamente. Isso é útil quando você encontrou o que procurava e não precisa continuar iterando:
fruits = ['apple', 'banana', 'cherry', 'date']
for fruit in fruits:
if fruit == 'cherry':
print('Found it!')
break
print(fruit)apple
banana
Found it!continue — Pular um item
continue pula para a próxima iteração sem executar as linhas restantes do bloco atual:
numbers = [1, 2, 3, 4, 5, 6]
for n in numbers:
if n % 2 == 0:
continue # skip even numbers
print(n)1
3
5A cláusula else em um loop
Um loop for ou while pode ter um bloco else que é executado quando o loop termina sem atingir um break. Isso é útil para padrões de "busca e relatório":
target = 7
numbers = [1, 3, 5, 9]
for n in numbers:
if n == target:
print('Found', target)
break
else:
print(target, 'not in list')7 not in listIterando sobre um slice de lista
Você pode iterar sobre parte de uma lista usando slicing:
items = ['a', 'b', 'c', 'd', 'e']
for item in items[1:4]: # indices 1, 2, 3
print(item)b
c
dIterando em ordem inversa com um slice:
for item in items[::-1]:
print(item)e
d
c
b
aLoops aninhados
Você pode aninhar loops for para trabalhar com listas de listas ou calcular combinações:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
for row in matrix:
for value in row:
print(value, end=' ')
print()1 2 3
4 5 6
7 8 9 O loop interno completa todas as suas iterações para cada iteração do loop externo.
Compreensões de lista como alternativa ao loop
Uma compreensão de lista cria uma nova lista aplicando uma expressão a cada item — é uma alternativa compacta e legível a um loop for que constrói uma lista:
numbers = [1, 2, 3, 4, 5]
# for loop approach
squares = []
for n in numbers:
squares.append(n ** 2)
# list comprehension — same result in one line
squares = [n ** 2 for n in numbers]
print(squares)[1, 4, 9, 16, 25]Você pode adicionar uma condição para filtrar itens ao mesmo tempo:
evens = [n for n in range(1, 11) if n % 2 == 0]
print(evens)[2, 4, 6, 8, 10]Armadilha comum: modificar uma lista durante a iteração
Não adicione ou remova itens de uma lista dentro de um loop for que itera sobre essa mesma lista. O índice interno do loop é baseado no comprimento original, então itens podem ser pulados ou visitados duas vezes.
# BAD — skips items
numbers = [1, 2, 3, 4, 5]
for n in numbers:
if n % 2 == 0:
numbers.remove(n) # mutates the list mid-loop
print(numbers) # [1, 3, 5] may look correct here but...O padrão seguro é iterar sobre uma cópia da lista ou construir uma nova lista com uma compreensão:
numbers = [1, 2, 3, 4, 5]
numbers = [n for n in numbers if n % 2 != 0]
print(numbers)[1, 3, 5]Operações básicas de lista usadas com loops
As seções abaixo recapitulam os métodos de lista mais usados junto com loops. Consulte Métodos de Lista em Python para a referência completa.
Adicionar elementos
my_list = [1, 2, 3]
my_list.append(4)
print(my_list)[1, 2, 3, 4]Remover elementos
remove() exclui o primeiro valor correspondente e lança um ValueError se o item não for encontrado.
my_list = [1, 2, 3, 4, 5]
my_list.remove(3)
print(my_list)[1, 2, 4, 5]Ordenar uma lista
my_list = [3, 1, 4, 2, 5]
my_list.sort()
print(my_list)[1, 2, 3, 4, 5]sort() modifica a lista no lugar. Para obter uma cópia ordenada sem alterar o original, use a função embutida sorted(). Consulte Ordenar Listas para ordenação em ordem inversa, ordenação por chave e mais.
Tópicos relacionados
- Listas Python — criando, indexando e fatiando listas
- Loops for em Python — a referência completa do loop
for - Loops while em Python — sintaxe e padrões do loop
while - Compreensão de Lista — construção compacta de listas em uma linha
- Métodos de Lista —
append,extend,pop,inserte mais - Ordenar Listas — ordenação no lugar vs. cópias ordenadas
- Remover Itens de Lista —
remove,pop,deleclear - Iterar sobre Dicionários — iterando sobre pares chave–valor
- Iterar sobre Tuplas — iterando sobre sequências imutáveis