1
resposta

[Projeto] Desafio: hora da prática

  1. lista_de_listas = [[4,6,5,9], [1,0,7,2], [3,4,1,8]]

soma_das_listas = [sum(lista_de_listas[i]) for i in range(len(lista_de_listas))]

print(soma_das_listas)

  1. lista_de_tuplas = [('Pedro', 1.74, 81), ('Júlia', 1.65, 67), ('Otávio', 1.81, 83)]

terceiro_elemento = [elemento[2] for elemento in lista_de_tuplas]

print(terceiro_elemento)

  1. lista = ['Pedro', 'Júlia', 'Otávio', 'Eduardo']

tuplas = list(enumerate(lista))

print(tuplas)

  1. aluguel = [('Apartamento', 1700), ('Apartamento', 1400), ('Casa', 2150), ('Apartamento', 1900), ('Casa', 1100)]

numeros_ap = [elemento[1] for elemento in aluguel if elemento[0] == 'Apartamento']

print(numeros_ap)

  1. meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
    despesa = [860, 490, 1010, 780, 900, 630, 590, 770, 620, 560, 840, 360]

relacao = {meses[i]: despesa[i] for i in range(len(meses))}

print(relacao)

  1. 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)]

#ano 2022 e vendas > 6000

filtrada = list(venda for venda in vendas if venda[0] == '2022' and venda[1] > 6000)
print(filtrada)

  1. glicemias = [129, 82, 60, 97, 101, 65, 62, 167, 87, 53, 58, 92, 66, 120, 109, 62, 86, 96, 103, 88, 155, 52, 89, 73]

com_status = [
(glicemia,
"Hipoglicemia" if glicemia <= 70
else "Normal" if glicemia <= 99
else "Alterada" if glicemia <= 125
else "Diabetes"
)
for glicemia in glicemias]

print(com_status)

  1. 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]

tabela = [('id', 'quantidade', 'preco', 'total')] + [
(i, q, p, q * p)
for i, q, p in zip(id, quantidade, preco)
]

print(tabela)

  1. estados = [
    'SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES',
    'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG',
    'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG'
    ]

contagem = {estado: estados.count(estado) for estado in set(estados)}

print(contagem)

  1. 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)
    ]

agrupados = {
estado: [qtd for uf, qtd in funcionarios if uf == estado]
for estado in set(uf for uf, _ in funcionarios)
}

print(agrupados)

soma_funcionarios = {
estado: sum(valores)
for estado, valores in agrupados.items()
}

print(soma_funcionarios)

1 resposta

Olá, Paulo Anderson! Como vai?

Parabéns pela excelente resolução do desafio! Você demonstrou um domínio avançado de List Comprehensions, Dictionary Comprehensions e manipulação de estruturas de dados (tuplas, listas e dicionários). Essas são ferramentas essenciais para qualquer profissional de Data Science, pois tornam o código muito mais performático e "Pythônico".

Notei pontos técnicos muito interessantes nas suas soluções:

Destaques do seu Código

  • Uso de zip(): Na tabela de preços, você utilizou o zip para iterar sobre três listas simultaneamente. Essa é a forma mais eficiente de combinar dados correlacionados em Python.
  • Lógica Condicional: No exercício das glicemias, você estruturou um "if-else" aninhado dentro de uma compreensão de lista. Isso é ótimo para rotular dados rapidamente durante uma análise exploratória.
  • Tratamento de Estados com set(): Ao usar set(estados), você garantiu que a contagem e o agrupamento fossem feitos apenas uma vez para cada estado único, evitando repetições desnecessárias no seu dicionário.

Dicas de Ouro para Data Science

Para elevar ainda mais o nível dos seus scripts, deixo duas sugestões:

  1. Evite o count() dentro de Comprehensions em listas grandes: No exercício da contagem de estados, o método .count() percorre a lista inteira para cada estado do set. Para milhões de linhas, isso fica lento. Uma alternativa mais rápida é usar o Counter da biblioteca collections:
from collections import Counter
contagem = dict(Counter(estados))
  1. Agrupamentos (Group By): Na última questão, você criou uma estrutura para agrupar e depois somar. Em projetos reais de Ciência de Dados, quando você começar a usar a biblioteca Pandas, fará isso com apenas uma linha: df.groupby('estado')['quantidade'].sum().

Desafio Extra

Dê uma olhada na sua lista de vendas. Se você quisesse criar um dicionário onde a chave é o ano e o valor é a soma total das vendas daquele ano, como você adaptaria a lógica de agrupamento que usou no exercício dos funcionários?

Você está com um raciocínio lógico muito afiado para manipulação de dados! Qual dessas estruturas (listas, tuplas ou dicionários) você sentiu que é a mais versátil para os seus estudos até agora?