Fundamentos do Python para Iniciantes

0/31 aulas0%
teoria

Introdução às Comprehensions (List, Dict)

Aprenda sobre introdução às comprehensions (list, dict)

35 min
Aula 5 de 5

Introdução às Comprehensions (List, Dict) 🚀

Olá, futuro mestre em Python! Nesta aula, vamos desvendar um dos recursos mais elegantes e eficientes da linguagem Python: as Comprehensions. Elas permitem criar listas, dicionários (e até sets e geradores) de forma concisa e legível, transformando e filtrando dados com apenas uma linha de código. Prepare-se para escrever um código mais "Pythonic"! ✨

1. O Que São Comprehensions?

Comprehensions são uma forma concisa de construir sequências (listas, dicionários, sets) a partir de outras sequências. Elas são inspiradas na notação de construção de conjuntos da matemática e oferecem uma alternativa mais curta e muitas vezes mais rápida do que os laços for tradicionais para a criação de novas coleções.

Por que usá-las?

  • Concisenza: Reduzem várias linhas de código a uma única linha.
  • Legibilidade: Uma vez que você se acostuma, o código se torna mais fácil de ler e entender.
  • Performance: Em muitos casos, são mais eficientes do que os laços for equivalentes.

Vamos explorar as mais comuns: List Comprehensions e Dictionary Comprehensions.

2. List Comprehensions (Compreensões de Lista)

As List Comprehensions são usadas para criar novas listas. Elas iteram sobre um iterável existente, aplicam uma expressão a cada item e, opcionalmente, filtram os itens com base em uma condição.

2.1. Sintaxe Básica

A sintaxe geral de uma List Comprehension é:

[expressao for item in iteravel if condicao]
  • expressao: O que será feito com cada item (ex: item * 2, item.upper()).
  • item: A variável que representa cada elemento do iteravel.
  • iteravel: A sequência sobre a qual você está iterando (ex: uma lista, uma tupla, um range()).
  • if condicao (opcional): Uma condição para filtrar os items. Somente os itens que satisfazem a condição serão incluídos na nova lista.

2.2. Comparação: for loop vs. List Comprehension

Vamos ver como uma List Comprehension pode simplificar um código.

Exemplo 1: Criando uma lista de quadrados de números.

# Usando um laço for tradicional
quadrados = []
for numero in range(1, 6):
    quadrados.append(numero ** 2)
print(f"Com for loop: {quadrados}")
# Saída: Com for loop: [1, 4, 9, 16, 25]
 
# Usando uma List Comprehension
quadrados_lc = [numero ** 2 for numero in range(1, 6)]
print(f"Com List Comprehension: {quadrados_lc}")
# Saída: Com List Comprehension: [1, 4, 9, 16, 25]

Percebeu a diferença? A List Comprehension é muito mais compacta e expressiva!

2.3. Exemplos Detalhados

Exemplo 2: Filtrando elementos

Vamos criar uma lista apenas com os números pares de uma lista existente.

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
# Usando List Comprehension com condição
numeros_pares = [num for num in numeros if num % 2 == 0]
print(f"Números pares: {numeros_pares}")
# Saída: Números pares: [2, 4, 6, 8, 10]

Exemplo 3: Transformação e Filtragem

Combinando os dois: queremos os quadrados dos números pares.

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
# Quadrados dos números pares
quadrados_pares = [num ** 2 for num in numeros if num % 2 == 0]
print(f"Quadrados dos números pares: {quadrados_pares}")
# Saída: Quadrados dos números pares: [4, 16, 36, 64, 100]

Exemplo 4: List Comprehension Aninhada

Para casos mais complexos, como "achatar" uma lista de listas.

matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
# Achatar a matriz em uma única lista
lista_achatada = [numero for linha in matriz for numero in linha]
print(f"Lista achatada: {lista_achatada}")
# Saída: Lista achatada: [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.4. Referência Oficial da Documentação (List Displays)

A documentação oficial do Python descreve as List Comprehensions na seção sobre "List displays". Você pode encontrar a sintaxe formal e mais detalhes em: 🔗 Python Documentation: List displays

3. Dictionary Comprehensions (Compreensões de Dicionário)

Assim como as List Comprehensions criam listas, as Dictionary Comprehensions criam novos dicionários. Elas permitem construir um dicionário a partir de um iterável, definindo como as chaves e os valores serão gerados.

3.1. Sintaxe Básica

A sintaxe geral de uma Dictionary Comprehension é:

{chave_expressao: valor_expressao for item in iteravel if condicao}
  • chave_expressao: A expressão que define a chave do novo item do dicionário.
  • valor_expressao: A expressão que define o valor do novo item do dicionário.
  • item: A variável que representa cada elemento do iteravel.
  • iteravel: A sequência sobre a qual você está iterando.
  • if condicao (opcional): Uma condição para filtrar os items.

3.2. Comparação: for loop vs. Dictionary Comprehension

Exemplo 5: Criando um dicionário de quadrados.

# Usando um laço for tradicional
quadrados_dict = {}
for numero in range(1, 6):
    quadrados_dict[numero] = numero ** 2
print(f"Com for loop: {quadrados_dict}")
# Saída: Com for loop: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
 
# Usando uma Dictionary Comprehension
quadrados_dict_dc = {numero: numero ** 2 for numero in range(1, 6)}
print(f"Com Dictionary Comprehension: {quadrados_dict_dc}")
# Saída: Com Dictionary Comprehension: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

3.3. Exemplos Detalhados

Exemplo 6: Criando um dicionário a partir de duas listas

Podemos usar a função zip() para combinar duas listas e criar um dicionário.

chaves = ['a', 'b', 'c']
valores = [1, 2, 3]
 
# Criando um dicionário a partir de chaves e valores
dicionario_combinado = {chave: valor for chave, valor in zip(chaves, valores)}
print(f"Dicionário combinado: {dicionario_combinado}")
# Saída: Dicionário combinado: {'a': 1, 'b': 2, 'c': 3}

Exemplo 7: Transformando chaves e valores

Vamos criar um dicionário onde as chaves são palavras em minúsculas e os valores são seus comprimentos.

palavras = ["Maçã", "Banana", "Cereja"]
 
# Transformando chaves e valores
dicionario_palavras = {palavra.lower(): len(palavra) for palavra in palavras}
print(f"Dicionário de palavras: {dicionario_palavras}")
# Saída: Dicionário de palavras: {'maçã': 4, 'banana': 6, 'cereja': 6}

Exemplo 8: Filtrando itens do dicionário

Podemos filtrar os itens de um dicionário existente para criar um novo.

estoque = {'maçã': 10, 'banana': 0, 'laranja': 5, 'uva': 15}
 
# Itens com estoque > 0
estoque_disponivel = {item: quantidade for item, quantidade in estoque.items() if quantidade > 0}
print(f"Estoque disponível: {estoque_disponivel}")
# Saída: Estoque disponível: {'maçã': 10, 'laranja': 5, 'uva': 15}

3.4. Referência Oficial da Documentação (Dictionary Displays)

A documentação oficial do Python aborda as Dictionary Comprehensions na seção sobre "Dictionary displays". Você pode encontrar a sintaxe formal e mais detalhes em: 🔗 Python Documentation: Dictionary displays

4. Comprehensions e Outras Estruturas (Bônus: Set Comprehensions)

O conceito de comprehensions não se limita apenas a listas e dicionários. Python também oferece Set Comprehensions (Compreensões de Conjunto), que seguem uma sintaxe muito similar.

4.1. Set Comprehensions

Set Comprehensions são usadas para criar conjuntos (set) de forma concisa. Lembre-se que sets não permitem elementos duplicados e não mantêm ordem.

Sintaxe:

{expressao for item in iteravel if condicao}

A única diferença visual em relação à List Comprehension é o uso de chaves {} em vez de colchetes [].

Exemplo 9: Criando um conjunto de números pares únicos.

numeros_duplicados = [1, 2, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10]
 
# Criando um conjunto de números pares únicos
pares_unicos = {num for num in numeros_duplicados if num % 2 == 0}
print(f"Números pares únicos: {pares_unicos}")
# Saída: Números pares únicos: {2, 4, 6, 8, 10}

Perceba que os números duplicados (2, 4, 8) e a ordem original foram removidos, resultando em um conjunto de elementos únicos.

5. Quando Usar e Boas Práticas

  • Priorize a clareza: Comprehensions são ótimas para concisão, mas se a lógica se tornar muito complexa (muitas condições, loops aninhados profundos), um for loop tradicional pode ser mais legível.
  • Evite efeitos colaterais: Comprehensions devem ser usadas para criar novas coleções, não para modificar coleções existentes ou realizar outras operações que causem "efeitos colaterais".
  • Performance: Para muitas operações de transformação e filtragem, comprehensions são geralmente mais rápidas que os for loops equivalentes porque são implementadas em C nos bastidores.

6. Exercícios / Desafios 🧠

Para fixar o conteúdo, tente resolver os seguintes desafios:

  1. List Comprehension: Dada uma lista de palavras ["python", "java", "c++", "javascript", "go"], crie uma nova lista contendo apenas as palavras que têm mais de 4 letras, convertidas para maiúsculas.
  2. Dictionary Comprehension: Dado o dicionário temperaturas = {"manhã": 20, "tarde": 28, "noite": 22}, crie um novo dicionário onde as chaves sejam as mesmas e os valores sejam as temperaturas convertidas para Fahrenheit (F = C * 1.8 + 32).
  3. List Comprehension com Aninhamento: Dada uma lista de strings ["1,2,3", "4,5", "6"], crie uma única lista de inteiros [1, 2, 3, 4, 5, 6]. (Dica: use split(',') e int()).
  4. Set Comprehension: Dada uma lista de e-mails ["a@ex.com", "b@ex.com", "a@ex.com", "c@ex.com"], crie um conjunto contendo apenas os domínios únicos de cada e-mail (ex: {"ex.com"}).

7. Resumo e Próximos Passos

Nesta aula, você aprendeu sobre as poderosas Comprehensions em Python:

  • List Comprehensions: [expressao for item in iteravel if condicao] para criar listas.
  • Dictionary Comprehensions: {chave: valor for item in iteravel if condicao} para criar dicionários.
  • Set Comprehensions: {expressao for item in iteravel if condicao} para criar conjuntos.

Elas são ferramentas essenciais para escrever código Python conciso, legível e eficiente. Pratique bastante para dominá-las!

Próximos Passos:

  • Explore as Generator Expressions (Expressões Geradoras), que são muito semelhantes às List Comprehensions, mas criam iteradores em vez de listas completas, economizando memória para grandes conjuntos de dados.
  • Continue praticando com mais exercícios e tente reescrever alguns de seus laços for existentes usando comprehensions.

Até a próxima aula! 🚀

© 2025 Escola All Dev. Todos os direitos reservados.

Introdução às Comprehensions (List, Dict) - Fundamentos do Python para Iniciantes | escola.all.dev.br