W3docs

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, continue e a cláusula else
  • enumerate() e zip() para iterações mais ricas
  • Iteração sobre strings, dicionários e estruturas aninhadas
  • Laços for aninhados
  • A instrução pass como marcador de posição

Sintaxe básica

for variable in iterable:
    # block executed once per item

variable recebe cada item sucessivo do iterable. O bloco indentado é executado uma vez para cada item.

Iterando sobre uma lista

python— editable, runs on the server

Saída:

apple
banana
cherry

O 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
n

A 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âmetroPadrãoSignificado
start0Primeiro valor (inclusivo)
stopobrigatórioLimite superior (exclusivo)
step1Incremento entre os valores

Contando de 1 a 5

python— editable, runs on the server

Saída:

1
2
3
4
5

range(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
8

Contando 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
2

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

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

Quando 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 finished

Se 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
2

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

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

zip() — 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 92

zip() 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 : Paris

Use .items() para obter pares chave-valor juntos:

for key, value in person.items():
    print(key, ":", value)

Saída:

name : Alice
age : 30
city : Paris

Veja 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.

python— editable, runs on the server

Saída:

red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherry

Atençã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 later

Sem 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çãoPrefira
Você sabe o número de iterações ou tem um iterávelfor
Você executa o laço até uma condição mudarwhile
Você precisa de índice e valorfor + enumerate()
Você percorre duas listas juntasfor + zip()

Prática

Prática
Which built-in function generates a sequence of integers for use in a for loop?
Which built-in function generates a sequence of integers for use in a for loop?
Prática
What does the else clause of a for loop do?
What does the else clause of a for loop do?
Prática
What are the primary uses of for loops in Python?
What are the primary uses of for loops in Python?
Was this page helpful?