Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] 13 Desafio: hora da prática

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

soma  = [ sum(x) for x in lista_de_listas ]
soma
#2
lista_de_tuplas = [('Pedro', 1.74, 81), ('Júlia', 1.65, 67), ('Otávio', 1.81, 83)]

terceiro_elemento = [item[2] for item in lista_de_tuplas]
terceiro_elemento
#3
lista = ['Pedro', 'Júlia', 'Otávio', 'Eduardo']

lista_tuplas = [(i, nome) for i, nome in enumerate(lista)]
lista_tuplas
#4
aluguel = [('Apartamento', 1700), ('Apartamento', 1400), ('Casa', 2150), ('Apartamento', 1900), ('Casa', 1100)]

numerico = [valor for tipo, valor in aluguel if tipo == 'Apartamento']
numerico
#5
lista_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]

dicionario = {chave: valor for chave, valor in zip(lista_meses, despesa)}
dicionario
#6
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)]

filtro =  [(ano, valor) for ano, valor in vendas if ano == '2022' and valor > 6000]
filtro
#7
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]
rotulos = ['Hipoglicemia', 'Normal', 'Alterada', 'Diabetes']

lista_tuplas = [(rotulo, valor) for valor in glicemia for rotulo in rotulos if (valor <= 70 and rotulo == 'Hipoglicemia') or (valor > 70 and valor <= 99 and rotulo == 'Normal') or (valor > 100 and valor <= 125 and rotulo == 'Alterada') or (valor > 125 and rotulo == 'Diabetes')]
lista_tuplas
#8
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]
cabecalho = ('id', 'quantidade', 'preço', 'valor total')

lista_tuplas = [cabecalho] + [(id[i], quantidade[i], preco[i], quantidade[i] * preco[i]) for i in range(len(id))]
lista_tuplas
#9
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_estados = {uf: estados.count(uf) for uf in estados}
contagem_estados
#10
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)]

lista_estados_unicos = list(set(estado for estado, _ in funcionarios)) # usei set porque pega sem repetição
print(f'Estados Unicos:  {lista_estados_unicos}')

funcionarios_por_estado = {estado_unico: [qtd for estado, qtd in funcionarios if estado == estado_unico] for estado_unico in lista_estados_unicos}
print(f'Estados x Funcionarios:  {funcionarios_por_estado}')

soma_funcionarios_por_estado = {estado: sum(qtds) for estado, qtds in funcionarios_por_estado.items()}
print(f'Total por Estado:  {soma_funcionarios_por_estado}')
2 respostas
solução!

Olá, Marcelo. Como vai?

Parabéns pela resolução do desafio! Você demonstrou um excelente domínio de List Comprehension e Dict Comprehension, que são recursos poderosos e elegantes do Python para manipular dados de forma concisa.

Notei que você aplicou conceitos fundamentais de Data Science, como o uso de zip() para combinar listas e set() para filtrar elementos únicos. Para agregar ainda mais valor aos seus estudos, preparei alguns comentários técnicos e sugestões sobre pontos específicos do seu código:

Destaque para o item #7 (Glicemia)
Sua lógica de aninhamento com for e if funcionou bem, mas em casos com muitas condições, o código pode ficar um pouco difícil de ler. Uma alternativa comum em análise de dados é criar uma função de categorização e chamá-la dentro da list comprehension:

def categorizar(valor):
    if valor <= 70: return 'Hipoglicemia'
    if valor <= 99: return 'Normal'
    if valor <= 125: return 'Alterada'
    return 'Diabetes'

lista_tuplas = [(categorizar(v), v) for v in glicemia]

Destaque para o item #9 (Contagem de Estados)
Sua solução {uf: estados.count(uf) for uf in estados} é funcional e criativa. No entanto, em listas muito grandes, ela pode ser lenta porque o método .count() percorre a lista inteira para cada item. Uma prática de alta performance seria usar o Counter da biblioteca padrão do Python:

from collections import Counter
contagem_estados = dict(Counter(estados))

Boas práticas observadas

  • No item #3, o uso do enumerate() é a forma mais "pythônica" de obter o índice e o valor simultaneamente.
  • No item #10, você utilizou o set() corretamente para extrair estados únicos antes de realizar a soma. Essa é uma estratégia eficiente para reduzir o número de iterações necessárias.

Seu progresso está nítido e a organização dos exercícios facilita muito a compreensão do raciocínio lógico aplicado.

Espero que possa ter lhe ajudado!

Olá Evandro,

obrigado pelas dicas, gostei delas vou levar pro meu notebook com alternativas.