W3docs

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
cherry

Python 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 blue

Isso 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 cherry

Você 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 cherry

Iterando 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 -> 78

Se 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 += 1
10
20
30
40
50

Loops 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
5

A 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 list

Iterando 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
d

Iterando em ordem inversa com um slice:

for item in items[::-1]:
    print(item)
e
d
c
b
a

Loops 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

Prática

Prática
Qual das opções a seguir imprime corretamente cada item de uma lista chamada 'items' usando um loop for?
Qual das opções a seguir imprime corretamente cada item de uma lista chamada 'items' usando um loop for?
Was this page helpful?