Programador Leigo
python 7 min leitura 2025-06-12

List Comprehension em Python: como usar com exemplos

Transforme 5 linhas de código em 1. Aprenda list comprehensions e escreva Python como um pythonista.


O jeito Python de criar listas

Se você já escreveu um for só para preencher uma lista, prepare-se: list comprehensions vão mudar sua vida.

# Jeito tradicional
quadrados = []
for n in range(10):
    quadrados.append(n ** 2)

# Com list comprehension
quadrados = [n ** 2 for n in range(10)]

Mesmo resultado, uma linha. E não é só mais curto — é mais legível quando você se acostuma.


A sintaxe básica

[expressão for item in iterável]

É como ler em português: "para cada item no iterável, calcule a expressão".

nomes = ["ana", "pedro", "maria"]
maiusculos = [nome.upper() for nome in nomes]
# ['ANA', 'PEDRO', 'MARIA']

Adicionando condições

Você pode filtrar com if:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Só os pares
pares = [n for n in numeros if n % 2 == 0]
# [2, 4, 6, 8, 10]

# Quadrados dos ímpares
quadrados_impares = [n ** 2 for n in numeros if n % 2 != 0]
# [1, 9, 25, 49, 81]

if/else na expressão

Quando você quer transformar todos os itens (sem filtrar), o if/else vai na expressão:

numeros = [1, 2, 3, 4, 5]

rotulos = ["par" if n % 2 == 0 else "ímpar" for n in numeros]
# ['ímpar', 'par', 'ímpar', 'par', 'ímpar']

Perceba a diferença: - Filtro (só if): fica no final → [x for x in lista if condição] - Transformação (if/else): fica na expressão → [a if condição else b for x in lista]


Comprehensions aninhadas

Para achatar uma lista de listas:

matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

plana = [n for linha in matriz for n in linha]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

Leia da esquerda para a direita: "para cada linha na matriz, para cada n na linha, pegue n".


Dict comprehensions

O mesmo conceito funciona para dicionários:

nomes = ["Python", "JavaScript", "Go"]

tamanhos = {nome: len(nome) for nome in nomes}
# {'Python': 6, 'JavaScript': 10, 'Go': 2}

E para inverter chave/valor:

original = {"a": 1, "b": 2, "c": 3}
invertido = {v: k for k, v in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}

Set comprehensions

Para criar conjuntos (sem duplicatas):

frase = "banana"
letras = {letra for letra in frase}
# {'b', 'a', 'n'}

Quando NÃO usar

List comprehensions são ótimas, mas não force. Se a lógica fica complexa demais, um for tradicional é mais legível:

# Isso é difícil de ler — use um for normal
resultado = [
    processa(item)
    for sublista in dados
    for item in sublista
    if item.ativo
    if item.valor > 100
]

A regra de ouro: se não cabe confortavelmente em uma linha, use um for.


Comparação de performance

List comprehensions são ligeiramente mais rápidas que loops com append:

import timeit

# Loop tradicional
def com_loop():
    resultado = []
    for i in range(1000):
        resultado.append(i ** 2)
    return resultado

# Comprehension
def com_comprehension():
    return [i ** 2 for i in range(1000)]

# A comprehension é ~20-30% mais rápida

Isso acontece porque o Python otimiza a criação da lista internamente, sem precisar chamar .append() a cada iteração.


Resumo rápido

Tipo Sintaxe
Lista [x for x in iterable]
Com filtro [x for x in iterable if condição]
Com transformação [a if cond else b for x in iterable]
Dicionário {k: v for k, v in iterable}
Conjunto {x for x in iterable}

Agora você tem um superpoder. Use com sabedoria.

Continue lendo

Compartilhar