Laços For em Python
Aprenda como os laços for do Python funcionam: sintaxe, range(), enumerate(), break, continue, else, laços aninhados e iteração sobre listas, strings e dicionários.
Um laço for em Python itera sobre cada item em uma sequência — uma lista, tupla, string, dicionário, conjunto ou qualquer outro iterável — e executa um bloco de código uma vez por item. Diferente de linguagens onde o for tipicamente conta números, o for do Python é um laço for-each que percorre os itens diretamente.
Este capítulo aborda:
- Sintaxe básica e como a variável do laço funciona
- A função
range()para laços contados break,continuee a cláusulaelseenumerate()ezip()para iterações mais ricas- Iteração sobre strings, dicionários e estruturas aninhadas
- Laços
foraninhados - A instrução
passcomo marcador de posição
Sintaxe básica
for variable in iterable:
# block executed once per itemvariable recebe cada item sucessivo do iterable. O bloco indentado é executado uma vez para cada item.
Iterando sobre uma lista
Saída:
apple
banana
cherryO laço atribui "apple" a fruit, executa print(fruit), depois passa para "banana", e assim por diante até que todos os itens sejam esgotados.
Iterando sobre uma string
Uma string é ela própria um iterável — cada caractere é um item:
for ch in "Python":
print(ch)Saída:
P
y
t
h
o
nA função range()
range() gera uma sequência de inteiros sob demanda. É a maneira mais comum de executar um laço um número específico de vezes.
range(stop)
range(start, stop)
range(start, stop, step)| Parâmetro | Padrão | Significado |
|---|---|---|
start | 0 | Primeiro valor (inclusivo) |
stop | obrigatório | Limite superior (exclusivo) |
step | 1 | Incremento entre os valores |
Contando de 1 a 5
Saída:
1
2
3
4
5range(1, 6) produz 1, 2, 3, 4, 5 — o valor de parada 6 não é incluído.
Contando em passos
for i in range(0, 10, 2):
print(i)Saída:
0
2
4
6
8Contando de trás para frente
Um passo negativo itera em sentido inverso:
for i in range(10, 0, -2):
print(i)Saída:
10
8
6
4
2A instrução break
break encerra o laço imediatamente, antes que todos os itens tenham sido visitados.
for i in range(1, 6):
if i == 3:
break
print(i)Saída:
1
2Quando i é igual a 3, o break é acionado e o laço para — 3, 4 e 5 nunca são impressos.
Quando usar break: ao pesquisar uma lista e parar assim que encontrar uma correspondência; ao sair antecipadamente de um cálculo longo.
A instrução continue
continue pula o restante da iteração atual e avança direto para o próximo item.
for i in range(1, 6):
if i == 3:
continue
print(i)Saída:
1
2
4
5Quando i é igual a 3, continue pula print(i) e salta para i = 4.
A cláusula else
O laço for do Python suporta um bloco else opcional que é executado somente se o laço for concluído normalmente (ou seja, não foi encerrado por break).
for i in range(1, 4):
print(i)
else:
print("Loop finished")Saída:
1
2
3
Loop finishedSe o laço terminar via break, o bloco else é ignorado:
for i in range(1, 6):
if i == 3:
break
print(i)
else:
print("Loop finished without break")Saída:
1
2A cláusula else é útil para sinalizar se uma busca foi bem-sucedida — se você usar break ao encontrar uma correspondência, o bloco else só será executado quando nenhuma correspondência for encontrada.
enumerate() — laço com índice e valor
enumerate() emparelha cada item com seu índice de posição, de modo que você obtém ambos em um único laço sem uma variável contadora separada.
colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
print(index, color)Saída:
0 red
1 green
2 bluePara começar a contar a partir de um número diferente, passe start:
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(i, fruit)Saída:
1 apple
2 banana
3 cherryzip() — iterar sobre duas sequências ao mesmo tempo
zip() emparelha itens de dois (ou mais) iteráveis lado a lado:
names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
print(name, score)Saída:
Alice 95
Bob 87
Charlie 92zip() para quando o iterável mais curto se esgota.
Iterando sobre dicionários
Iterar sobre um dicionário por padrão produz suas chaves:
person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
print(key, ":", person[key])Saída:
name : Alice
age : 30
city : ParisUse .items() para obter pares chave-valor juntos:
for key, value in person.items():
print(key, ":", value)Saída:
name : Alice
age : 30
city : ParisVeja também o capítulo Loop Dictionaries para mais padrões.
Laços for aninhados
Um laço for pode ser colocado dentro de outro laço for. O laço interno é executado completamente para cada iteração do laço externo.
Saída:
red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherryAtenção: break dentro de um laço aninhado encerra apenas o laço interno, não ambos. Para sair de ambos os laços de uma vez, você precisa de uma variável de sinalização ou refatorar em uma função e usar return.
A instrução pass
pass é um marcador de posição sem operação. Use-o quando um laço for é sintaticamente obrigatório, mas você ainda não tem nada para colocar no corpo:
for i in range(3):
pass # TODO: implement laterSem pass, o Python geraria um IndentationError porque um bloco vazio é uma sintaxe inválida.
Laços for vs list comprehensions
Um padrão comum é construir uma nova lista dentro de um laço for:
squares = []
for x in range(1, 6):
squares.append(x ** 2)
print(squares)Saída: [1, 4, 9, 16, 25]
Python oferece uma alternativa mais concisa chamada list comprehension:
squares = [x ** 2 for x in range(1, 6)]
print(squares)Saída: [1, 4, 9, 16, 25]
List comprehensions são idiomáticas para transformações simples; use um laço for regular quando o corpo for complexo ou tiver efeitos colaterais.
Escolhendo entre for e while
| Situação | Prefira |
|---|---|
| Você sabe o número de iterações ou tem um iterável | for |
| Você executa o laço até uma condição mudar | while |
| Você precisa de índice e valor | for + enumerate() |
| Você percorre duas listas juntas | for + zip() |