List Comprehension
O que é list comprehension?
List comprehension é o jeito pythonico de criar listas. Em vez de escrever um loop inteiro com append, você faz tudo em uma linha só. A ideia é simples: a expressao vem primeiro, depois o for, é um if opcional no final para filtrar.
Se você já sabe usar for e append, list comprehension e apenas um atalho mais limpo para mesma coisa.
Comprehension básica
A expressao vem primeiro, depois o for:
quadrados: list[int] = [x ** 2 for x in range(1, 6)]
print(quadrados) # → [1, 4, 9, 16, 25]
# Convertendo temperaturas
celsius: list[float] = [0, 20, 37, 100]
fahrenheit: list[float] = [(c * 9/5) + 32 for c in celsius]
print(fahrenheit) # → [32.0, 68.0, 98.6, 212.0]
Comprehension com filtro
O if no final filtra quem entra na lista:
números: list[int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pares: list[int] = [x for x in números if x % 2 == 0]
print(pares) # → [2, 4, 6, 8, 10]
Comprehension com if/else (ternário)
Quando o if/else vem antes do for, você escolhe entre dois valores:
valores: list[int] = [10, -3, 5, -7, 8]
positivos: list[int] = [x if x > 0 else 0 for x in valores]
print(positivos) # → [10, 0, 5, 0, 8]
For tradicional vs comprehension
O mesmo resultado, duas formas de escrever:
# For tradicional (4 linhas)
resultado: list[int] = []
for x in range(1, 11):
if x % 2 == 0:
resultado.append(x ** 2)
# List comprehension (1 linha)
resultado: list[int] = [x ** 2 for x in range(1, 11) if x % 2 == 0]
print(resultado) # → [4, 16, 36, 64, 100]
Dict e set comprehension
A mesma lógica funciona com {} para criar dicionarios e sets:
# Dict comprehension - chave: valor
palavras: list[str] = ["python", "e", "incrivel"]
tamanhos: dict[str, int] = {p: len(p) for p in palavras}
print(tamanhos) # → {'python': 6, 'e': 1, 'incrivel': 8}
# Set comprehension - valores unicos
números: list[int] = [1, 2, 2, 3, 3, 3, 4]
unicos: set[int] = {x for x in números}
print(unicos) # → {1, 2, 3, 4}
Exercício prático
Dada uma lista de palavras, use list comprehension para:
- Criar uma lista só com palavras que tem mais de 4 letras
- Criar uma lista com todas as palavras em maiusculo
- Criar um dicionario
{palavra: tamanho}
palavras: list[str] = ["sol", "computador", "lua", "programação", "py", "dados"]
# 1. [p for p in palavras if len(p) > 4]
# 2. [p.upper() for p in palavras]
# 3. {p: len(p) for p in palavras}
Referências
- List Comprehensions -- documentação oficial Python
- When to Use a List Comprehension in Python -- guia completo no Real Python
- Curso Python #15 - Listas (Parte 2) -- Curso em Video
Testa o que você leu
4 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.