Fundamentos do Python para Iniciantes
Introdução às Comprehensions (List, Dict)
Aprenda sobre introdução às comprehensions (list, dict)
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
forequivalentes.
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 cadaitem(ex:item * 2,item.upper()).item: A variável que representa cada elemento doiteravel.iteravel: A sequência sobre a qual você está iterando (ex: uma lista, uma tupla, umrange()).if condicao(opcional): Uma condição para filtrar ositems. 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 doiteravel.iteravel: A sequência sobre a qual você está iterando.if condicao(opcional): Uma condição para filtrar ositems.
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
forloop 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
forloops equivalentes porque são implementadas em C nos bastidores.
6. Exercícios / Desafios 🧠
Para fixar o conteúdo, tente resolver os seguintes desafios:
- 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. - 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). - 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: usesplit(',')eint()). - 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
forexistentes usando comprehensions.
Até a próxima aula! 🚀