Voltar ao Glossario
Glossario Python

Loop: O que É e Como Funciona | Python Brasil

Domine loops em Python: for, while, break, continue, else, enumerate, zip e boas praticas para criar iteracoes eficientes e legiveis.

O que e um Loop?

Um loop (laco de repeticao) em Python e uma estrutura de controle que executa um bloco de codigo repetidamente enquanto uma condicao for verdadeira ou enquanto houver elementos em um iteravel. Python oferece duas estruturas de loop: for e while. O loop for e mais utilizado porque itera diretamente sobre elementos de uma sequencia, sem necessidade de gerenciar indices manualmente.

Loop for

O for em Python itera sobre qualquer objeto iteravel — listas, tuplas, strings, dicionarios, conjuntos, arquivos, ranges e generators.

# Iterando sobre uma lista
frutas = ['maca', 'banana', 'laranja']
for fruta in frutas:
    print(f'Eu gosto de {fruta}')

# Iterando sobre uma string
for letra in 'Python':
    print(letra, end=' ')  # P y t h o n

# Usando range
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

for i in range(2, 10, 3):
    print(i)  # 2, 5, 8

# Iterando sobre dicionario
config = {'host': 'localhost', 'porta': 8080, 'debug': True}

for chave in config:
    print(chave)

for chave, valor in config.items():
    print(f'{chave}: {valor}')

for valor in config.values():
    print(valor)

Loop while

O while executa enquanto uma condicao for verdadeira. E ideal quando nao se sabe antecipadamente quantas iteracoes serao necessarias.

# Loop while basico
contador = 0
while contador < 5:
    print(contador)
    contador += 1

# Leitura de entrada do usuario
while True:
    resposta = input('Digite "sair" para encerrar: ')
    if resposta.lower() == 'sair':
        break
    print(f'Voce digitou: {resposta}')

# While com condicao composta
tentativas = 0
max_tentativas = 3
autenticado = False

while tentativas < max_tentativas and not autenticado:
    senha = input('Senha: ')
    if senha == 'python123':
        autenticado = True
    else:
        tentativas += 1
        print(f'Tentativa {tentativas} de {max_tentativas}')

break, continue e else

# break — interrompe o loop completamente
for numero in range(100):
    if numero > 5:
        break
    print(numero)  # 0, 1, 2, 3, 4, 5

# continue — pula para a proxima iteracao
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)  # 1, 3, 5, 7, 9

# else em loops — executa quando o loop termina sem break
def buscar_primo(limite):
    for n in range(2, limite):
        for divisor in range(2, int(n ** 0.5) + 1):
            if n % divisor == 0:
                break
        else:
            # Executado se o for interno NAO teve break
            print(f'{n} e primo')

buscar_primo(20)

Funcoes Auxiliares para Loops

# enumerate — itera com indice
nomes = ['Ana', 'Bruno', 'Carla']
for i, nome in enumerate(nomes):
    print(f'{i + 1}. {nome}')

for i, nome in enumerate(nomes, start=1):
    print(f'{i}. {nome}')

# zip — itera sobre multiplos iteraveis em paralelo
alunos = ['Ana', 'Bruno', 'Carla']
notas = [9.5, 7.8, 8.3]
for aluno, nota in zip(alunos, notas):
    print(f'{aluno}: {nota}')

# zip com tres ou mais iteraveis
materias = ['Matematica', 'Portugues', 'Ciencias']
for aluno, nota, materia in zip(alunos, notas, materias):
    print(f'{aluno} tirou {nota} em {materia}')

# reversed — itera em ordem inversa
for fruta in reversed(frutas):
    print(fruta)

# sorted — itera em ordem classificada
numeros = [3, 1, 4, 1, 5, 9]
for n in sorted(numeros):
    print(n)

Loops Aninhados

# Matriz (lista de listas)
matriz = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]

for linha in matriz:
    for elemento in linha:
        print(elemento, end=' ')
    print()  # nova linha

# Produto cartesiano
cores = ['vermelho', 'azul']
tamanhos = ['P', 'M', 'G']
for cor in cores:
    for tamanho in tamanhos:
        print(f'{cor}-{tamanho}')

# Alternativa com itertools.product
from itertools import product
for cor, tamanho in product(cores, tamanhos):
    print(f'{cor}-{tamanho}')

Comprehensions como Alternativa

Para loops simples que constroem colecoes, comprehensions sao mais concisas e geralmente mais rapidas.

# Em vez de:
quadrados = []
for x in range(10):
    quadrados.append(x ** 2)

# Use:
quadrados = [x ** 2 for x in range(10)]

# Dict comprehension
nomes = ['ana', 'bruno', 'carla']
comprimentos = {nome: len(nome) for nome in nomes}

# Set comprehension
unicos = {len(nome) for nome in nomes}

# Generator expression (para iteracao preguicosa)
soma = sum(x ** 2 for x in range(1000000))

Padroes Comuns com itertools

from itertools import chain, groupby, islice, count

# chain — concatena iteraveis
for item in chain([1, 2], [3, 4], [5, 6]):
    print(item)

# islice — fatia iteradores
for valor in islice(count(10), 5):
    print(valor)  # 10, 11, 12, 13, 14

# groupby — agrupa elementos consecutivos
dados = [('fruta', 'maca'), ('fruta', 'banana'), ('vegetal', 'cenoura')]
dados.sort(key=lambda x: x[0])
for tipo, grupo in groupby(dados, key=lambda x: x[0]):
    print(f'{tipo}: {[item[1] for item in grupo]}')

Erros Comuns

O erro mais perigoso e criar um loop infinito acidental com while, esquecendo de atualizar a variavel de controle. Outro erro frequente e modificar uma lista durante a iteracao com for, o que pode pular elementos ou gerar resultados inesperados — prefira iterar sobre uma copia ou usar list comprehension para filtrar. Tambem e comum usar range(len(lista)) quando enumerate() seria mais Pythonico e menos propenso a erros de indice.

Boas Praticas

Prefira for sobre while sempre que possivel, pois o for e menos propenso a loops infinitos. Use enumerate em vez de indices manuais. Use zip para iterar sobre multiplas sequencias. Considere comprehensions para loops simples. Para loops muito complexos, extraia a logica para funcoes. Evite loops desnecessarios — funcoes como sum(), any(), all(), min() e max() podem substituir loops inteiros.

Quando Usar

Loops sao essenciais em qualquer programa que precise processar colecoes de dados, repetir acoes ate uma condicao ser atendida, ou percorrer estruturas de dados. Escolha for quando souber o iteravel antecipadamente e while quando a condicao de parada depender de logica dinamica.