Loop for: iterando sobre sequências
1. Introdução ao loop for em Python
O loop for em Python é uma das estruturas de controle mais fundamentais e versáteis da linguagem. Diferentemente de linguagens como C ou Java, onde o for é tipicamente baseado em índices numéricos, o for do Python funciona como um foreach: ele itera diretamente sobre os elementos de uma sequência ou qualquer objeto iterável.
# Sintaxe básica
for elemento in sequencia:
# bloco de código executado para cada elemento
print(elemento)
A magia por trás do for está no protocolo de iteração. Qualquer objeto que implemente os métodos __iter__() e __next__() pode ser usado em um loop for. Isso inclui strings, listas, tuplas, dicionários, conjuntos, arquivos e muito mais.
# O for funciona porque strings são iteráveis
for letra in "Python":
print(letra, end=" ") # Saída: P y t h o n
2. Iterando sobre strings e listas
Strings e listas são os iteráveis mais comuns. Vamos explorar como percorrê-los eficientemente.
# Percorrendo caracteres de uma string
palavra = "Python"
for char in palavra:
if char in "aeiou":
print(f"Vogal encontrada: {char}")
# Navegando por elementos de uma lista
frutas = ["maçã", "banana", "laranja"]
for fruta in frutas:
print(f"Eu gosto de {fruta}")
Quando precisamos tanto do índice quanto do valor, usamos enumerate():
# Acessando índice e valor com enumerate()
cores = ["vermelho", "azul", "verde"]
for indice, cor in enumerate(cores):
print(f"Posição {indice}: {cor}")
# Saída:
# Posição 0: vermelho
# Posição 1: azul
# Posição 2: verde
# Podemos especificar o índice inicial
for indice, cor in enumerate(cores, start=1):
print(f"Cor {indice}: {cor}")
3. Iterando sobre tuplas, conjuntos e dicionários
Cada estrutura de dados tem particularidades na iteração.
# Desempacotamento em tuplas dentro do loop
pontos = [(1, 2), (3, 4), (5, 6)]
for x, y in pontos:
print(f"Ponto ({x}, {y}) - Soma: {x + y}")
# Iteração sobre conjuntos (ordem não garantida)
numeros_unicos = {3, 1, 4, 1, 5, 9, 2, 6}
for num in numeros_unicos:
print(num, end=" ") # Ordem imprevisível, mas sem duplicatas
# Dicionários: chaves, valores e itens
aluno = {"nome": "Ana", "idade": 25, "curso": "Python"}
# Apenas chaves (comportamento padrão)
for chave in aluno:
print(chave) # nome, idade, curso
# Apenas valores
for valor in aluno.values():
print(valor) # Ana, 25, Python
# Chaves e valores juntos
for chave, valor in aluno.items():
print(f"{chave}: {valor}")
4. Controle de fluxo dentro do for
O Python oferece comandos poderosos para controlar a execução do loop.
# break: interrompe a iteração prematuramente
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numeros:
if num > 5:
break
print(num, end=" ") # Saída: 1 2 3 4 5
# continue: pula para a próxima iteração
for num in range(10):
if num % 2 == 0:
continue
print(num, end=" ") # Saída: 1 3 5 7 9
# Cláusula else: executada quando não há break
for i in range(3):
print(i)
else:
print("Loop completo sem interrupção!")
# Saída: 0 1 2 Loop completo sem interrupção!
# Com break, o else não executa
for i in range(3):
if i == 1:
break
print(i)
else:
print("Isso não será executado")
5. Combinando for com range()
range() gera sequências numéricas sem ocupar memória desnecessária.
# range(stop) - de 0 até stop-1
for i in range(5):
print(i, end=" ") # 0 1 2 3 4
# range(start, stop) - intervalo definido
for i in range(2, 8):
print(i, end=" ") # 2 3 4 5 6 7
# range(start, stop, step) - com passo
for i in range(0, 20, 5):
print(i, end=" ") # 0 5 10 15
# Iterando sobre índices de uma lista (quando necessário)
frutas = ["maçã", "banana", "laranja"]
for i in range(len(frutas)):
print(f"Índice {i}: {frutas[i]}")
# Diferença crucial: iterar sobre elementos vs índices
# Prefira sempre iterar sobre os elementos
melhor_forma = [x.upper() for x in frutas] # Direto
pior_forma = [frutas[i].upper() for i in range(len(frutas))] # Indexado
6. Técnicas avançadas de iteração
Domine estas técnicas para escrever código mais elegante e eficiente.
# Compreensão de listas (list comprehension)
# Forma tradicional
quadrados = []
for x in range(10):
quadrados.append(x**2)
# Forma concisa com list comprehension
quadrados_lc = [x**2 for x in range(10)]
print(quadrados_lc) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Com condicional
pares = [x for x in range(20) if x % 2 == 0]
# Função zip() para múltiplas sequências
nomes = ["Alice", "Bob", "Charlie"]
idades = [25, 30, 35]
cidades = ["SP", "RJ", "BH"]
for nome, idade, cidade in zip(nomes, idades, cidades):
print(f"{nome}, {idade} anos, mora em {cidade}")
# reversed() e sorted()
lista = [3, 1, 4, 1, 5, 9, 2, 6]
print([x for x in reversed(lista)]) # [6, 2, 9, 5, 1, 4, 1, 3]
print([x for x in sorted(lista)]) # [1, 1, 2, 3, 4, 5, 6, 9]
7. Boas práticas e erros comuns
Evite armadilhas e escreva código Pythonic.
# ERRO: Modificar a sequência durante a iteração
lista = [1, 2, 3, 4, 5]
# for item in lista:
# if item % 2 == 0:
# lista.remove(item) # Comportamento imprevisível!
# CORRETO: Criar uma cópia
for item in lista[:]: # Cópia da lista
if item % 2 == 0:
lista.remove(item)
print(lista) # [1, 3, 5]
# Uso de _ para variáveis não utilizadas
for _ in range(3):
print("Python é incrível!")
# Performance: prefira iteração direta
# RUIM
soma = 0
for i in range(len(numeros)):
soma += numeros[i]
# BOM
soma = sum(numeros)
# Para transformações, use list comprehension
# RUIM
resultado = []
for x in range(100):
resultado.append(x * 2)
# BOM
resultado = [x * 2 for x in range(100)]
O loop for em Python é uma ferramenta elegante e poderosa. Ao entender suas nuances e aplicá-lo com as técnicas certas, você escreverá código mais limpo, eficiente e expressivo.
Referências
- Documentação oficial: Loops for — Documentação oficial do Python sobre a sintaxe e uso do loop for
- Real Python: Python for Loops — Guia completo com exemplos práticos e explicações detalhadas
- W3Schools: Python For Loops — Tutorial interativo com exemplos básicos e avançados
- GeeksforGeeks: Python For Loops — Artigo técnico cobrindo todas as variações do loop for
- Python Documentation: Iterator Types — Documentação oficial sobre o protocolo de iteração em Python
- Programiz: Python for Loop — Tutorial visual com diagramas explicativos sobre o funcionamento do loop