List Comprehension no Python para Iniciantes

Tempo de leitura: 13 minutos
Palavra Python escrita à mão em superfície amarela com desenho de carinha sorrindo.

Se você está começando a aprender Python, provavelmente já ouviu falar sobre list comprehension. Essa é uma das funcionalidades mais elegantes e poderosas da linguagem, permitindo criar listas de forma mais rápida e concisa. Mas o que exatamente é list comprehension e por que você deveria usá-la?

Neste guia completo, você vai aprender tudo sobre list comprehension no Python, desde os conceitos básicos até exemplos práticos que você pode aplicar imediatamente nos seus projetos. Vamos explorar como essa técnica pode tornar seu código mais limpo, eficiente e profissional.

O que é List Comprehension no Python?

List comprehension é uma maneira concisa e elegante de criar novas listas a partir de sequências existentes em Python. Em vez de usar múltiplas linhas com loops tradicionais, você pode realizar a mesma tarefa em apenas uma linha de código.

A sintaxe básica de uma list comprehension é:

Python
nova_lista = [expressao for item in iteravel]

Essa estrutura permite aplicar uma expressão a cada elemento de um iterável (como uma lista, tupla ou range) e criar uma nova lista com os resultados.

YouTube player

Vídeo explicativo sobre List Comprehension por Hashtag Programação.

Por que Usar List Comprehension?

Existem várias razões pelas quais programadores experientes preferem usar list comprehension:

Código mais limpo e legível: List comprehensions tornam o código mais direto e fácil de entender. Quando você se acostuma com a sintaxe, fica muito mais simples visualizar o que o código está fazendo.

Melhor desempenho: List comprehensions são mais rápidas que loops tradicionais porque são otimizadas internamente pelo Python. A implementação em C torna a execução mais eficiente.

Menos linhas de código: O que poderia levar 4 ou 5 linhas com um loop for tradicional pode ser feito em apenas uma linha com list comprehension.

Estilo pythônico: Usar list comprehension é considerado uma boa prática em Python. Demonstra que você conhece as funcionalidades da linguagem e escreve código profissional.

Como Funciona a Sintaxe Básica

Vamos entender melhor a estrutura de uma list comprehension comparando com um loop tradicional. Imagine que você tem uma lista de números e quer criar outra lista com o dobro de cada número:

Usando Loop Tradicional

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

for numero in numeros:
    dobro.append(numero * 2)

print(dobro)  # [2, 4, 6, 8, 10]

Usando List Comprehension

Python
numeros = [1, 2, 3, 4, 5]
dobro = [numero * 2 for numero in numeros]

print(dobro)  # [2, 4, 6, 8, 10]

Veja como ficou mais simples! A list comprehension permite fazer a mesma operação em apenas uma linha. A estrutura é bem intuitiva: você está dizendo ao Python para pegar cada número da lista original e multiplicar por 2.

Exemplos Práticos de List Comprehension

Vamos explorar diversos exemplos práticos para você entender melhor como aplicar list comprehension em diferentes situações:

Criando uma Lista de Quadrados

Python
quadrados = [x ** 2 for x in range(1, 11)]
print(quadrados)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Convertendo Temperaturas

Python
celsius = [0, 10, 20, 30, 40]
fahrenheit = [(temp * 9/5) + 32 for temp in celsius]
print(fahrenheit)  # [32.0, 50.0, 68.0, 86.0, 104.0]

Manipulando Strings

Python
nomes = ['joão', 'maria', 'pedro', 'ana']
nomes_maiusculos = [nome.upper() for nome in nomes]
print(nomes_maiusculos)  # ['JOÃO', 'MARIA', 'PEDRO', 'ANA']

Extraindo Informações de Strings

Python
frase = "Python é uma linguagem incrível"
tamanhos = [len(palavra) for palavra in frase.split()]
print(tamanhos)  # [6, 1, 3, 9, 8]

List Comprehension com Condições (if)

Uma das funcionalidades mais úteis da list comprehension é a capacidade de adicionar condições. Você pode filtrar elementos usando a estrutura if:

Python
nova_lista = [expressao for item in iteravel if condicao]

Filtrando Números Pares

Python
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pares = [num for num in numeros if num % 2 == 0]
print(pares)  # [2, 4, 6, 8, 10]

Filtrando Valores Positivos

Python
valores = [-5, 3, -1, 10, -8, 7, 0]
positivos = [valor for valor in valores if valor > 0]
print(positivos)  # [3, 10, 7]

Filtrando Strings por Tamanho

Python
palavras = ["sol", "computador", "casa", "programação", "luz"]
palavras_longas = [palavra for palavra in palavras if len(palavra) > 5]
print(palavras_longas)  # ['computador', 'programação']

List Comprehension com if-else

Você também pode usar a estrutura if-else dentro de list comprehensions. A sintaxe é um pouco diferente:

Python
nova_lista = [expressao_if if condicao else expressao_else for item in iteravel]

Classificando Números

Python
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
classificacao = ["par" if num % 2 == 0 else "ímpar" for num in numeros]
print(classificacao)  # ['ímpar', 'par', 'ímpar', 'par', ...]

Aplicando Desconto Condicional

Python
precos = [100, 250, 80, 500, 150]
precos_ajustados = [preco * 0.9 if preco > 200 else preco for preco in precos]
print(precos_ajustados)  # [100, 225.0, 80, 450.0, 150]

List Comprehension Aninhada

É possível usar list comprehensions aninhadas para trabalhar com estruturas mais complexas, como matrizes ou listas de listas. Essa técnica é útil quando você precisa processar dados bidimensionais.

Criando uma Matriz

Python
matriz = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matriz)
# [[1, 2, 3],
#  [2, 4, 6],
#  [3, 6, 9]]

Achatando uma Lista Aninhada

Python
lista_aninhada = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lista_plana = [numero for sublista in lista_aninhada for numero in sublista]
print(lista_plana)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

Quando Usar e Quando Evitar List Comprehension

Embora list comprehension seja uma ferramenta poderosa, existem situações onde ela pode não ser a melhor escolha:

Use list comprehension quando:

  • A operação é simples e direta
  • Você está criando uma nova lista a partir de uma sequência
  • O código permanece legível em uma linha
  • Você precisa aplicar uma transformação ou filtro básico

Evite list comprehension quando:

  • A lógica é muito complexa e dificulta a leitura
  • Você precisa de múltiplas operações ou tratamento de erros
  • A compreensão fica muito longa ou aninhada demais
  • Um loop tradicional seria mais claro

Comparando Performance: Loop vs List Comprehension

List comprehensions são geralmente mais rápidas que loops tradicionais. Veja um exemplo de comparação de desempenho:

Python
import time

# Usando loop tradicional
inicio = time.time()
resultado_loop = []
for i in range(1000000):
    resultado_loop.append(i * 2)
tempo_loop = time.time() - inicio

# Usando list comprehension
inicio = time.time()
resultado_comprehension = [i * 2 for i in range(1000000)]
tempo_comprehension = time.time() - inicio

print(f"Loop: {tempo_loop:.4f} segundos")
print(f"Comprehension: {tempo_comprehension:.4f} segundos")

Você verá que a list comprehension geralmente executa cerca de 20 a 30% mais rápido que o loop tradicional.

Aplicações Práticas no Dia a Dia

Agora vamos ver alguns exemplos do mundo real onde list comprehension é extremamente útil:

Processamento de Dados CSV

Python
dados_brutos = ["João,25,São Paulo", "Maria,30,Rio de Janeiro", "Pedro,22,Curitiba"]
dados_processados = [linha.split(',') for linha in dados_brutos]
print(dados_processados)
# [['João', '25', 'São Paulo'], ['Maria', '30', 'Rio de Janeiro'], ...]

Validação de E-mails

Python
emails = ["[email protected]", "maria@", "[email protected]", "@exemplo.com"]
emails_validos = [email for email in emails if "@" in email and "." in email]
print(emails_validos)  # ['[email protected]', '[email protected]']

Cálculo de Estatísticas

Python
notas = [7.5, 8.0, 6.5, 9.0, 7.0, 8.5]
notas_aprovados = [nota for nota in notas if nota >= 7.0]
media = sum(notas_aprovados) / len(notas_aprovados)
print(f"Média dos aprovados: {media:.2f}")

Dict Comprehension e Set Comprehension

O conceito de comprehension não se limita apenas a listas. Python também oferece dict comprehension e set comprehension:

Dict Comprehension

Python
numeros = [1, 2, 3, 4, 5]
quadrados_dict = {num: num**2 for num in numeros}
print(quadrados_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Set Comprehension

Python
numeros = [1, 2, 2, 3, 3, 3, 4, 4, 5]
numeros_unicos = {num for num in numeros}
print(numeros_unicos)  # {1, 2, 3, 4, 5}

Erros Comuns e Como Evitá-los

Ao usar list comprehension, alguns erros comuns podem ocorrer. Vamos ver os principais:

Erro 1: Esquecer os Colchetes

Python
# Incorreto - gera um gerador, não uma lista
resultado = (x * 2 for x in range(5))

# Correto - cria uma lista
resultado = [x * 2 for x in range(5)]

Erro 2: Ordem Incorreta do if-else

Python
# Incorreto
resultado = [x for x in range(10) if x % 2 == 0 else x * 2]

# Correto
resultado = [x if x % 2 == 0 else x * 2 for x in range(10)]

Erro 3: Comprehensions Muito Complexas

Python
# Evite isso - difícil de ler
resultado = [[x*y for y in range(5) if y % 2 == 0] for x in range(10) if x > 5]

# Melhor usar loops tradicionais ou dividir em etapas

Dicas de Boas Práticas

Para escrever list comprehensions eficientes e legíveis, siga estas dicas:

Mantenha a simplicidade: Se a comprehension ficar muito longa ou complexa, divida em múltiplas linhas ou use um loop tradicional. A legibilidade é mais importante que economia de linhas.

Use nomes descritivos: Mesmo em comprehensions, use nomes de variáveis que façam sentido. Evite usar apenas letras como x, y, z em casos complexos.

Prefira legibilidade sobre performance: A menos que você esteja trabalhando com grandes volumes de dados, a diferença de performance entre um loop e uma comprehension é negligível.

Comente quando necessário: Se a lógica da comprehension não é óbvia, adicione um comentário explicativo acima dela.

Exercícios Práticos para Treinar

A melhor maneira de dominar list comprehension é praticando. Aqui estão alguns exercícios para você tentar resolver:

Exercício 1: Crie uma lista com os números de 1 a 50 que são divisíveis por 3.

Exercício 2: Dada uma lista de palavras, crie outra lista com o comprimento de cada palavra.

Exercício 3: Filtre uma lista de números, mantendo apenas os que estão entre 10 e 50.

Exercício 4: Crie uma lista com tuplas (número, quadrado do número) para números de 1 a 10.

Exercício 5: Converta uma lista de strings para inteiros, ignorando valores que não podem ser convertidos.

Combinando List Comprehension com Outras Funcionalidades

List comprehension funciona muito bem quando combinada com outras funcionalidades do Python:

Com Funções Lambda

Python
funcao = lambda x: x ** 2
numeros = [1, 2, 3, 4, 5]
quadrados = [funcao(num) for num in numeros]
print(quadrados)  # [1, 4, 9, 16, 25]

Com Funções Personalizadas

Python
def eh_primo(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

primos = [num for num in range(2, 50) if eh_primo(num)]
print(primos)  # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

Com Zip

Python
nomes = ['Ana', 'Bruno', 'Carlos']
idades = [25, 30, 28]
pessoas = [f"{nome} tem {idade} anos" for nome, idade in zip(nomes, idades)]
print(pessoas)
# ['Ana tem 25 anos', 'Bruno tem 30 anos', 'Carlos tem 28 anos']

List Comprehension em Projetos Reais

Vamos ver como list comprehension é usada em cenários mais realistas de projetos Python:

Processamento de Logs

Python
logs = [
    "2024-01-15 ERROR: Falha na conexão",
    "2024-01-15 INFO: Sistema iniciado",
    "2024-01-15 ERROR: Arquivo não encontrado",
    "2024-01-15 WARNING: Memória em 80%"
]

erros = [log for log in logs if "ERROR" in log]
print(f"Total de erros: {len(erros)}")
print(erros)

Análise de Dados de Vendas

Python
vendas = [
    {"produto": "Notebook", "valor": 3000, "quantidade": 2},
    {"produto": "Mouse", "valor": 50, "quantidade": 10},
    {"produto": "Teclado", "valor": 150, "quantidade": 5}
]

total_por_produto = [
    {"produto": v["produto"], "total": v["valor"] * v["quantidade"]} 
    for v in vendas
]
print(total_por_produto)

Comparação com Outras Linguagens

List comprehension é uma característica que torna Python especial. Em outras linguagens de programação como Java ou JavaScript, você precisaria de mais código para realizar as mesmas operações.

Por exemplo, em JavaScript você usaria o método map() ou filter() para operações similares, mas a sintaxe do Python é mais concisa e intuitiva.

Próximos Passos no Aprendizado

Agora que você domina list comprehension, está pronto para avançar para conceitos mais complexos de Python. Considere estudar:

Se você está começando sua jornada em Python, recomendo também conferir nosso guia completo para iniciantes e aprender sobre como instalar Python no seu computador.

Perguntas Frequentes (FAQ)

1. List comprehension é mais rápida que um loop for?

Sim, list comprehension geralmente é 20 a 30% mais rápida que loops tradicionais porque é otimizada internamente.

2. Posso usar múltiplas condições em list comprehension?

Sim, você pode encadear múltiplas condições usando operadores lógicos como and e or.

3. Qual a diferença entre list comprehension e generator expression?

List comprehension usa colchetes e retorna uma lista completa. Generator expression usa parênteses e retorna valores sob demanda.

4. List comprehension funciona com outros tipos de dados?

Sim, o conceito se aplica a dicionários (dict comprehension) e conjuntos (set comprehension) também.

5. Posso criar listas vazias com list comprehension?

Sim, se nenhum elemento satisfizer as condições, você terá uma lista vazia como resultado.

6. Como debugar uma list comprehension complexa?

Converta temporariamente para um loop tradicional ou use print() para verificar valores intermediários.

7. List comprehension consome muita memória?

Ela cria a lista completa na memória. Para grandes volumes, considere usar generator expressions.

8. Posso modificar a lista original usando list comprehension?

Não, list comprehension sempre cria uma nova lista. Para modificar a original, use loops tradicionais.

9. List comprehension funciona com strings?

Sim, strings são iteráveis em Python, então você pode usar list comprehension para processar caracteres.

10. Existe limite de complexidade para list comprehension?

Não há limite técnico, mas por legibilidade, evite mais de dois níveis de aninhamento ou condições muito complexas.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Ilustração minimalista do logotipo da linguagem de programação Python ao lado do texto REGEX em fundo neutro
    Fundamentos
    Foto do Leandro Hirt

    Regex Python: Tudo Sobre Expressões Regulares

    Se você já tentou encontrar padrões específicos em textos, validar formatos de email ou extrair informações de documentos, provavelmente já

    Ler mais

    Tempo de leitura: 12 minutos
    05/01/2026
    Logo do Python, texto TXT e ícone de bloco de notas representando arquivos de texto
    Fundamentos
    Foto do Leandro Hirt

    Como Ler Arquivos TXT no Python

    Trabalhar com arquivos de texto é uma das tarefas mais comuns na programação. Aprender como ler arquivo TXT no Python

    Ler mais

    Tempo de leitura: 14 minutos
    24/12/2025
    Comparação visual entre Python 2 e Python 3 com ícones minimalistas
    Fundamentos
    Foto do Leandro Hirt

    Python 2 vs Python 3: Principais Diferenças

    Se você está começando a estudar Python ou já trabalha com a linguagem, provavelmente já se deparou com uma dúvida

    Ler mais

    Tempo de leitura: 20 minutos
    22/12/2025
    Pessoa pensando com um monitor desfocado ao fundo
    Fundamentos
    Foto do Leandro Hirt

    Tipos de Dados em Python: int, float, str, list e dict

    Aprenda tudo sobre os principais tipos de dados em Python: int, float, str, list e dict. Guia completo com exemplos

    Ler mais

    Tempo de leitura: 14 minutos
    21/12/2025
    Pessoa usando tablet com caneta digital para planejar tarefas em checklist, representando organização, planejamento e produtividade digital.
    Fundamentos
    Foto do Leandro Hirt

    Como Ordenar Listas no Python (Sort vs Sorted)

    Você já ficou confuso sobre quando usar sort() ou sorted() para organizar suas listas em Python? Não está sozinho. Esses

    Ler mais

    Tempo de leitura: 12 minutos
    20/12/2025
    Logo do Python com uma faca, simbolizando fatiamento
    Fundamentos
    Foto do Leandro Hirt

    Fatiamento em Python: Tudo Sobre Slicing

    O fatiamento (ou slicing) é uma técnica fundamental em Python que permite extrair partes específicas de sequências como listas, strings

    Ler mais

    Tempo de leitura: 11 minutos
    13/12/2025