List comprehension é uma das features mais "pythônicas" da linguagem — uma forma concisa de criar listas a partir de iteráveis, com ou sem filtro. Além de mais elegante, geralmente é mais rápida que o loop equivalente. Dominar isso é um marco importante no aprendizado de Python.
Sintaxe básica
# Forma equivalente com loop:
quadrados = []
for n in range(1, 6):
quadrados.append(n ** 2)
# Com list comprehension:
quadrados = [n ** 2 for n in range(1, 6)]
# [1, 4, 9, 16, 25]
Leitura: "crie uma lista de n ao quadrado, para cada n de 1 a 5."
Com filtro (condição)
valores = [120, 450, 89, 1200, 340, 5600, 230]
# Apenas os maiores que 300:
acima_300 = [v for v in valores if v > 300]
# [450, 1200, 5600, 340] -- aguarda, aqui seria [450, 1200, 340, 5600]
# Transformação + filtro:
pares_dobrados = [n * 2 for n in range(10) if n % 2 == 0]
# [0, 4, 8, 12, 16]
Com expressão condicional (ternário)
valores = [1200, 450, 8900, 320, 5600]
categorias = ["Premium" if v >= 1000 else "Standard" for v in valores]
# ["Premium", "Standard", "Premium", "Standard", "Premium"]
Aninhado: listas de listas
matriz = [[1,2,3],[4,5,6],[7,8,9]]
# Achatar (flatten) a matriz em uma lista:
plana = [elemento for linha in matriz for elemento in linha]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
Dict comprehension
vendedores = ["Ana", "Bruno", "Carlos"]
metas = [50000, 40000, 60000]
# Criar dicionário vendedor -> meta:
metas_dict = {v: m for v, m in zip(vendedores, metas)}
# {"Ana": 50000, "Bruno": 40000, "Carlos": 60000}
# Inverter um dicionário:
invertido = {valor: chave for chave, valor in metas_dict.items()}
Set comprehension
estados = ["SP", "RJ", "SP", "MG", "RJ", "SP"]
# Valores únicos com set comprehension:
unicos = {e for e in estados}
# {"SP", "RJ", "MG"}
Aplicações práticas com Pandas
import pandas as pd
# Renomear múltiplas colunas de uma vez:
df.columns = [col.lower().replace(" ", "_") for col in df.columns]
# Criar lista de nomes de arquivos para um intervalo de datas:
arquivos = [f"vendas_{ano}_{mes:02d}.csv"
for ano in [2025, 2026]
for mes in range(1, 13)]
Perguntas frequentes
List comprehension é sempre mais rápida que loop for?
Geralmente sim — entre 20-50% mais rápida para operações simples. Mas para lógica muito complexa, um loop for com comentários pode ser mais legível e manutenível. Priorize legibilidade em código de produção.
Qual a diferença entre list comprehension e generator expression?
Generator expression usa parênteses em vez de colchetes: (x**2 for x in range(1000)). Não cria a lista em memória — gera os valores sob demanda. Use quando você só vai iterar o resultado uma vez ou quando a lista seria muito grande.