Seja para as carreiras de Tecnologia da Informação ou para cargos que exigem Ciência de Dados, Python deixou de ser um diferencial para se tornar um requisito básico. É necessário conhecer diversos aspectos da linguagem. Comprehensions está entre os tópicos mais cobrados nas questões sobre Python nos concursos públicos mais recentes.
Veja o que será abordado:
Comprehensions são uma forma concisa de criar listas, dicionários e conjuntos em Python a partir de iteráveis. Em vez de escrever um loop for com várias linhas, toda a lógica é condensada em uma única expressão.
A principal vantagem das list comprehensions em relação ao loop for convencional é a sintaxe mais concisa e legível. Isso foi cobrado diretamente em questão de concurso, que perguntava sobre a principal vantagem do recurso. A alternativa correta afirmava justamente que ele “resulta em uma sintaxe mais concisa e legível quando comparado a um loop for convencional para criar listas”.
Vale destacar: comprehensions não se limitam a listas. O Python oferece variações para dicionários, conjuntos e geradores, cada uma com características e delimitadores próprios.
A list comprehension é a forma mais utilizada do recurso. Sua sintaxe segue o padrão abaixo:
resultado = [expressao for item in iteravel]
Exemplo: para criar uma lista com os quadrados dos números de 1 a 5:
numeros = [1, 2, 3, 4, 5]
quadrados = [x**2 for x in numeros]
# Resultado: [1, 4, 9, 16, 25]
Sem o list comprehension, o mesmo resultado exigiria um bloco for com append(). A forma compacta produz o mesmo efeito, mas em menos linhas e com leitura mais fluída para quem conhece a sintaxe.
Uma das variações mais cobradas em provas é o uso de condicionais com if dentro do list comprehension. A sintaxe é:
resultado = [expressao for item in iteravel if condicao]
Observe o exemplo que apareceu diretamente em questão de concurso:
numeros = [1, 2, 3, 4, 5]
resultado = [x**2 for x in numeros if x % 2 == 0]
print(resultado)
O operador x % 2 == 0 seleciona apenas os números pares (2 e 4). Os números 1, 3 e 5 são descartados pelo filtro antes de qualquer transformação.
Esse padrão de filtrar e transformar é exatamente o que as bancas costumam testar: saber identificar corretamente quais elementos sobrevivem ao filtro e qual valor é calculado ao final.
Além das listas, o Python permite criar dicionários e conjuntos com a mesma lógica. A distinção está nos delimitadores utilizados:
| Tipo | Delimitador | Exemplo |
| List comprehension | [ ] | [x*2 for x in nums] |
| Set comprehension | { } | {x*2 for x in nums} |
| Dict comprehension | { : } | {x: x*2 for x in nums} |
No dict comprehension, é necessário informar uma expressão para a chave e outra para o valor:
numeros = [1, 2, 3]
quadrados = {x: x**2 for x in numeros}
# Resultado: {1: 1, 2: 4, 3: 9}
No set comprehension, o resultado é um conjunto sem elementos duplicados e sem ordem garantida:
letras = [‘a’, ‘b’, ‘a’, ‘c’]
conjunto = {l.upper() for l in letras}
# Resultado: {‘A’, ‘B’, ‘C’}
Os três tipos admitem condicionais com if da mesma forma que o list comprehension.
As generator expressions têm a mesma sintaxe das list comprehensions, mas utilizam parênteses no lugar de colchetes:
gerador = (x**2 for x in range(1000000))
A diferença fundamental é que o gerador não armazena todos os valores na memória de uma vez. Os elementos são produzidos sob demanda, conforme o código os consome. Isso foi abordado em questão de concurso, que afirmava corretamente:
“A expressão sum(x**2 for x in range(1000000)) utiliza um gerador, que gera os valores sob demanda sem armazená-los em memória, tornando o processamento mais eficiente para grandes volumes de dados.”
Como regra prática: use list comprehension quando precisar acessar os valores múltiplas vezes ou por índice; use generator expression quando precisar percorrer os dados apenas uma vez, especialmente com grandes volumes.
Algumas situações costumam confundir candidatos nas provas. As principais são:
nums = [1, 2, 3]
res = [lambda: n * 2 for n in nums]
print(res[0](), res[1](), res[2]())
# Saída: 6 6 6
O candidato pode esperar as saídas 2 4 6, mas as três funções imprimem 6, pois ao serem chamadas o loop já terminou e n vale 3 para todas elas. Para corrigir o comportamento, basta passar n como parâmetro padrão da lambda, forçando a captura do valor no momento da criação:
res = [lambda n=n: n * 2 for n in nums]
print(res[0](), res[1](), res[2]())
# Saída: 2 4 6
As comprehensions em Python figuram entre os recursos mais cobrados em concursos que envolvem programação. Dominar a sintaxe do list, dict e set comprehension, além das generator expressions, permite não apenas resolver questões de código com segurança, mas também compreender as escolhas de estruturas da linguagem.
https://docs.python.org/3/tutorial/datastructures.html
https://medium.com/skiller-whale/late-binding-variables-its-a-trap-c17af980164f
https://jellis18.github.io/post/2022-11-23-late-binding-python
O concurso da SED SC oferece 10 mil vagas em várias especialidades Os editais da…
Já está na praça o novo edital do concurso TJ SC (Tribunal de Justiça de…
Olá, coruja!! Neste presente artigo do Estratégia Concursos vamos analisar um assunto muito importante para a prova de Auditor Fiscal de Goiás: pagamento do ITCD para SEFAZ/GO de acordo com a legislação nacional e estadual. …
Olá, leitores! Tudo bem com vocês? Neste artigo, vamos compreender melhor as diferenças entre a…
Olá, alunos! Como vocês estão? Nesse artigo, vamos falar de um tema muito importante dentro…
Ministra afirma que decisão sobre excedentes do CNU 2 só ocorrerá após nomeação das vagas…