Estou compartilhando as minhas soluções abaixo. Caso alguém tenha feito de uma maneira diferente ou tenha dúvidas sobre o passo a passo, fiquem à vontade para comentar!
- Filtragem de Vendas por Ano e Valor
Aqui o uso de List Comprehension brilha. Precisamos iterar sobre a lista de tuplas e extrair apenas o valor numérico (venda), desde que o ano seja '2022' e o valor seja superior a 6000.
vendas = [('2023', 4093), ('2021', 4320), ('2021', 5959), ('2022', 8883),
('2023', 9859), ('2022', 5141), ('2022', 7688), ('2022', 9544),
('2023', 4794), ('2021', 7178), ('2022', 3030), ('2021', 7471),
('2022', 4226), ('2022', 8190), ('2021', 9680), ('2022', 5616)]
# Extrai o valor da venda para cada tupla (ano, venda) aplicando os filtros desejados
vendas_filtradas = [venda for ano, venda in vendas if ano == '2022' and venda > 6000]
print("Vendas de 2022 acima de 6000:")
print(vendas_filtradas)
- Rótulos de Glicemia com Condicionais Aninhadas
Neste desafio, precisamos aplicar múltiplas regras condicionais (if/elif/else) dentro da List Comprehension. Para manter o código legível e modular, a melhor prática é criar uma função auxiliar para fazer a classificação e chamá-la dentro da Comprehension.
glicemia = [129, 82, 60, 97, 101, 65, 62, 167, 87, 53, 58, 92, 66, 120, 109, 62, 86, 96, 103, 88, 155, 52, 89, 73]
# Função auxiliar para manter a comprehension limpa
def rotular_glicose(valor):
if valor <= 70:
return 'Hipoglicemia'
elif valor <= 99:
return 'Normal'
elif valor <= 125:
return 'Alterada'
else:
return 'Diabetes'
# Cria a lista de tuplas no formato (Rótulo, Valor)
rotulos_glicemia = [(rotular_glicose(g), g) for g in glicemia]
print("Dados rotulados de glicemia:")
print(rotulos_glicemia)
- Estruturação de Tabela do E-commerce
Para consolidar os dados das três listas, usei a função zip(), que agrupa os elementos de mesmo índice. Primeiro, criei a tabela com o cabeçalho e, em seguida, adicionei a List Comprehension que calcula o valor total (q * p).
id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
quantidade = [15, 12, 1, 15, 2, 11, 2, 12, 2, 4]
preco = [93.0, 102.0, 18.0, 41.0, 122.0, 14.0, 71.0, 48.0, 14.0, 144.0]
# Adicionamos o cabeçalho como o primeiro elemento da lista
tabela = [('id', 'quantidade', 'preco', 'total')]
# O zip itera pelas 3 listas simultaneamente, calculando o total em tempo real
linhas_dados = [(i, q, p, q * p) for i, q, p in zip(id, quantidade, preco)]
tabela.extend(linhas_dados)
print("Tabela estruturada:")
for linha in tabela:
print(linha)
- Contagem de Filiais por Estado com Dict Comprehension
Aqui, a dica é usar a função set() para extrair os estados únicos (as chaves do nosso dicionário). Depois, na Dict Comprehension, usamos o método .count() na lista original para obter o total de cada estado.
estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG',
'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']
# Cria um dicionário onde a chave é o estado único (set) e o valor é a contagem na lista
contagem_filiais = {estado: estados.count(estado) for estado in set(estados)}
print("Quantidade de filiais por estado:")
print(contagem_filiais)
- Agrupamento e Soma de Colaboradores por Estado
Este exercício exige duas etapas. A primeira é criar um dicionário agrupando as listas de funcionários por estado. A segunda é criar outro dicionário que faz a soma dessas listas.
funcionarios = [('SP', 16), ('ES', 8), ('MG', 9), ('MG', 6), ('SP', 10), ('MG', 4),
('ES', 9), ('ES', 7), ('ES', 12), ('SP', 7), ('SP', 11), ('MG', 8),
('ES', 8), ('SP', 9), ('RJ', 13), ('MG', 5), ('RJ', 9), ('SP', 12),
('MG', 10), ('SP', 7), ('ES', 14), ('SP', 10), ('MG', 12)]
# Extrai a lista de estados únicos para iterarmos
estados_unicos = set([estado for estado, qtd in funcionarios])
# 1. Dicionário com o agrupamento em listas
# Filtra as quantidades em que a UF da tupla corresponde à UF atual do laço
agrupamento_funcionarios = {uf: [qtd for estado, qtd in funcionarios if estado == uf] for uf in estados_unicos}
# 2. Dicionário com a soma dos colaboradores
soma_funcionarios = {uf: sum(lista) for uf, lista in agrupamento_funcionarios.items()}
print("Agrupamento (listas de colaboradores):")
print(agrupamento_funcionarios)
print("\nSoma total de colaboradores por estado:")
print(soma_funcionarios)
Espero que essas soluções tragam bons insights para vocês! Dominar as Comprehensions é um grande passo para escrever códigos mais limpos e eficientes na análise de dados.
Bons estudos e muito código para nós!