Do for básico ao list comprehension avançado — guia prático com exemplos reais e boas práticas.
Loops (ou laços de repetição) servem para executar um bloco de código várias vezes, sem precisar repetir manualmente.
for i in range(5):
print(i)
0
1
2
3
4
for → quando você sabe quantas vezes quer repetir; while → quando você repete até uma condição parar de ser verdadeira.Usado quando você quer iterar sobre uma sequência (lista, string, dicionário, etc.).
for variavel in sequencia:
# código
Exemplo com lista:
nomes = ["Ana", "João", "Carlos"]
for nome in nomes:
print(nome)
Percorrendo strings:
for letra in "Python":
print(letra)
Usando índice com enumerate:
nomes = ["Ana", "João", "Carlos"]
for i, nome in enumerate(nomes):
print(i, nome)
0 Ana
1 João
2 Carlos
Loop em dicionários:
pessoa = {"nome": "Igor", "idade": 25}
for chave, valor in pessoa.items():
print(chave, valor)
nome Igor
idade 25
A função range() gera uma sequência de números — essencial para loops com contagem.
range(inicio, fim, passo)
range(5)
0 até 4 (5 elementos)
range(1, 5)
1 até 4
range(0, 10, 2)
0, 2, 4, 6, 8 (passo 2)
range(5, 0, -1)
5, 4, 3, 2, 1 (decrescente)
for i in range(5):
print(i) # 0 1 2 3 4
for i in range(1, 6):
print(i) # 1 2 3 4 5
for i in range(0, 10, 2):
print(i) # 0 2 4 6 8
O while repete enquanto uma condição for verdadeira. Use quando você não sabe previamente o número de repetições.
while condicao:
# código
Exemplo básico:
contador = 0
while contador < 5:
print(contador)
contador += 1
0
1
2
3
4
False, o programa never termina. Sempre garanta que a condição vai mudar — ou use break para sair.while True:
entrada = input("Digite 'sair' para parar: ")
if entrada == "sair":
break
print(f"Você digitou: {entrada}")
Palavras-chave para controlar o fluxo dentro de um loop.
break → interrompe o loop completamente:
for i in range(10):
if i == 5:
break
print(i) # imprime 0 1 2 3 4
continue → pula para a próxima iteração:
for i in range(5):
if i == 2:
continue
print(i) # imprime 0 1 3 4 (pula o 2)
pass → não faz nada (placeholder):
for i in range(5):
pass # estrutura vazia, sem erro
pass é útil quando você precisa da estrutura do loop mas ainda não escreveu o código interno. Evita SyntaxError por bloco vazio.Em Python, loops podem ter um bloco else — ele roda somente se o loop terminar normalmente (sem break).
for i in range(5):
print(i)
else:
print("Loop terminou normalmente")
for i in range(5):
if i == 3:
break
else:
print("Isso não vai aparecer") # não executa
else em loops é muito usado em buscas — se o item não foi encontrado, o else avisa.Um loop dentro de outro — útil para trabalhar com matrizes, tabelas e combinações.
for i in range(3):
for j in range(2):
print(i, j)
0 0
0 1
1 0
1 1
2 0
2 1
Forma curta e pythônica de criar listas usando um loop em uma única linha.
numeros = []
for x in range(5):
numeros.append(x)
# numeros = [0, 1, 2, 3, 4]
numeros = [x for x in range(5)]
# numeros = [0, 1, 2, 3, 4]
Com condição:
pares = [x for x in range(10) if x % 2 == 0]
# pares = [0, 2, 4, 6, 8]
Com transformação:
quadrados = [x**2 for x in range(6)]
# quadrados = [0, 1, 4, 9, 16, 25]
for + append para criação de listas simples. É considerada a forma mais "pythônica".sum() — soma elementos:
soma = sum([1, 2, 3, 4, 5])
print(soma) # 15
max() / min() — maior e menor valor:
max([1, 5, 3]) # 5
min([1, 5, 3]) # 1
zip() — percorre listas em paralelo:
nomes = ["Ana", "João"]
idades = [20, 25]
for nome, idade in zip(nomes, idades):
print(nome, idade)
Ana 20
João 25
sorted() e reversed() — ordem:
nums = [3, 1, 4, 1, 5]
for n in sorted(nums):
print(n) # 1 1 3 4 5
for n in reversed(nums):
print(n) # 5 1 4 1 3
✔ Boas práticas:
for ao invés de while quando possívelbreak ou condição clara)i só para casos simples)enumerate() ao invés de range(len(lista))❌ Erro 1 — Esquecer de incrementar no while (loop infinito):
# ❌ ruim — loop infinito
i = 0
while i < 5:
print(i)
# i nunca muda!
# ✅ correto
i = 0
while i < 5:
print(i)
i += 1
❌ Erro 2 — Usar índice desnecessário:
# ❌ ruim
for i in range(len(lista)):
print(lista[i])
# ✅ melhor
for item in lista:
print(item)
# ✅ se precisar do índice também
for i, item in enumerate(lista):
print(i, item)
📋 Quando usar cada tipo:
| Situação | Use |
|---|---|
| Percorrer lista / string | for item in colecao |
| Repetir N vezes | for i in range(N) |
| Precisar de índice + valor | for i, v in enumerate(lista) |
| Percorrer duas listas juntas | for a, b in zip(lista1, lista2) |
| Repetir até condição mudar | while condicao |
| Loop infinito controlado | while True + break |
| Criar lista filtrada / transformada | [x for x in ... if ...] |
Somando apenas número ímpares de uma lista e filtrando com list comprehension:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Soma dos ímpares com for + continue
soma = 0
for n in numeros:
if n % 2 == 0:
continue
soma += n
print("Soma dos ímpares:", soma) # 25
# Mesma coisa com list comprehension + sum()
impares = [n for n in numeros if n % 2 != 0]
soma2 = sum(impares)
print("Ímpares:", impares) # [1, 3, 5, 7, 9]
print("Soma:", soma2) # 25
# Tabela de multiplicação com loops aninhados
print("\nTabela do 3:")
for i in range(1, 11):
print(f"3 x {i} = {3*i}")
Soma dos ímpares: 25
Ímpares: [1, 3, 5, 7, 9]
Soma: 25
Tabela do 3:
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
...
3 x 10 = 30
for + range, depois vá para while, depois pratique list comprehension. Essa ordem é a mais natural para um pythonista!