Módulo 2 - Compreensões de lista, dicionário e conjunto
O que é uma compreensão de lista
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Reconhecer o padrão de laço que existe só para preencher uma lista.
- Entender a sintaxe [expressão for item in sequência].
- Converter um for de construção de lista em uma compreensão equivalente.
- Saber quando a compreensão deixa o código mais claro e quando não.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: O que é uma compreensão de lista.
Os objetivos desta aula. Reconhecer o padrão de laço que existe só para preencher uma lista. Entender a sintaxe [expressão for item in sequência]. Converter um for de construção de lista em uma compreensão equivalente. Saber quando a compreensão deixa o código mais claro e quando não.
Veja o essencial, parte por parte.
O padrão que se repete o tempo todo. Uma compreensão de lista constrói uma lista inteira em uma expressão só.
A anatomia da compreensão. Vale desmontar a compreensão em partes para nunca mais ter dúvida.
Quando usar, e quando não usar. Escreva primeiro o for normal, que você já domina.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O padrão que se repete o tempo todo
Se você olhar seus programas do Básico, vai encontrar o mesmo padrão dezenas de vezes: cria uma lista vazia, passa por uma sequência com um for e vai acrescentando itens com append. É um padrão tão comum que o Python tem uma forma dedicada e mais curta para ele, a compreensão de lista. A ideia não é escrever menos por vaidade, e sim deixar claro, de um golpe de vista, que o objetivo daquele trecho é construir uma nova lista a partir de outra.
numeros = [1, 2, 3, 4, 5]
# O jeito longo, que voce ja conhece:
dobros = []
for n in numeros:
dobros.append(n * 2)
print(dobros) # [2, 4, 6, 8, 10]O padrão clássico: lista vazia, laço e append. Funciona, mas ocupa quatro linhas.
Agora veja o mesmo resultado escrito como compreensão. As três partes do laço continuam ali, só que reorganizadas em uma linha: o que fazer com cada item (n * 2), de onde vêm os itens (for n) e a sequência de origem (in numeros). Não há mágica nova acontecendo; é o mesmo laço, com a mesma lógica, apenas na forma que a comunidade Python considera a mais direta para essa tarefa.
numeros = [1, 2, 3, 4, 5]
dobros = [n * 2 for n in numeros]
print(dobros) # [2, 4, 6, 8, 10]A mesma lista, agora em uma compreensão. Leia como: dobro de n, para cada n em numeros.
A anatomia da compreensão
Vale desmontar a compreensão em partes para nunca mais ter dúvida. Ela sempre começa com colchetes, porque o resultado é uma lista. Logo depois vem a expressão, que é o valor que cada item vira na lista nova. Em seguida, o for item in sequência, exatamente igual ao laço que você já escreve. A expressão fica na frente de propósito: quando você lê a linha, a primeira coisa que aparece é o que a lista vai conter, e só depois de onde vem.
| Parte | No exemplo n * 2 for n in numeros | Papel |
|---|---|---|
| Expressão | n * 2 | O que cada item vira na lista nova |
| Variável do laço | for n | O nome que recebe cada item, um por vez |
| Sequência | in numeros | De onde os itens vêm |
| Colchetes | [ ... ] | Sinalizam que o resultado é uma lista |
As quatro partes de uma compreensão de lista simples.
A expressão pode ser qualquer coisa que produza um valor, não só uma conta. Chamar um método, formatar um texto, aplicar uma função, tudo cabe ali. O exemplo abaixo transforma uma lista de nomes bagunçados em uma lista limpa, tirando espaços e deixando a primeira letra maiúscula, tudo em uma linha. Repare como fica fácil enxergar a intenção: para cada nome, arrume o nome.
brutos = [" ana", "BRUNO ", "carla "]
nomes = [n.strip().capitalize() for n in brutos]
print(nomes) # ['Ana', 'Bruno', 'Carla']A expressão pode encadear métodos: strip() tira espaços e capitalize() ajusta a inicial.
Quando usar, e quando não usar
A compreensão brilha quando a tarefa é simples e cabe confortavelmente em uma linha: transformar cada item de uma sequência em outro. Não é para toda situação. Se dentro do laço você precisa de várias linhas de lógica, imprimir coisas, tratar erros ou tomar decisões complicadas, o for tradicional é mais legível e é a escolha certa. A regra prática é honesta: se a compreensão ficou difícil de ler, ela perdeu o propósito, que era justamente a clareza.
Bom caso para compreensão
- Transformar cada item em outro valor
- Uma expressão curta por item
- Construir uma lista nova e pronto
- Lê-se de um golpe de vista
Melhor deixar como for
- Várias linhas de lógica por item
- Precisa de print ou try dentro
- Efeitos colaterais, não só construir
- Ficaria uma linha comprida e confusa
Teste rápido
Qual compreensão produz a lista dos quadrados de [1, 2, 3, 4]?
Perguntas frequentes
- A compreensão é mais rápida que o for com append?
- Geralmente sim, um pouco, porque o Python otimiza esse caminho internamente. Mas a razão principal para usá-la não é velocidade, e sim clareza: em uma linha fica evidente que o objetivo é construir uma lista a partir de outra. Prefira a compreensão pela legibilidade, não por microdesempenho.
- Preciso trocar todos os meus laços por compreensões?
- Não. Só faz sentido nos laços que existem para construir uma lista, com uma expressão curta por item. Laços com várias linhas de lógica, prints ou tratamento de erro continuam mais legíveis na forma tradicional. Compreensão é ferramenta, não obrigação.
- Posso usar uma função dentro da compreensão?
- Pode. A expressão aceita qualquer coisa que produza um valor, incluindo chamadas de função, como [arredondar(x) for x in valores]. É um uso muito comum: aplicar a mesma transformação a todos os itens de uma sequência.
- A variável do laço continua existindo depois da compreensão?
- Não. Diferente de um for comum, a variável usada na compreensão (o n do exemplo) fica restrita a ela e não vaza para o resto do programa. Isso é proposital e ajuda a evitar bugs por variáveis reaproveitadas sem querer.
- Dá para criar uma tupla com compreensão usando parênteses?
- Não da forma que se espera. Colchetes criam lista, mas parênteses não criam tupla: eles criam um generator, assunto de uma aula mais à frente. Para obter uma tupla, envolva a compreensão em tuple(), como tuple(n * 2 for n in numeros).
- Compreensão funciona com strings e range também?
- Sim. Qualquer coisa que dê para percorrer com um for serve de fonte: listas, tuplas, strings, range, dicionários. Por exemplo, [letra.upper() for letra in "casa"] percorre a string caractere a caractere e devolve a lista de letras maiúsculas.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.