1
resposta

Desafio 3 : Reposta

#1--
lista_de_listas = [[4,6,5,9], [1,0,7,2], [3,4,1,8]]
soma = list(map(lambda n : sum(n), lista_de_listas))
soma_com_list_comprehension = [sum(n) for n in  lista_de_listas]
print(f'A soma é : {soma}')
print(f'A soma é : {soma_com_list_comprehension}')


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

#2--
lista = []
for i in lista_de_tuplas:
    lista.append(i[2])

lista_com_list_comprehension = [n[2] for n in lista_de_tuplas]    

print(lista)
print(lista_com_list_comprehension)

#3--

lista_com_nomes = ['Pedro', 'Júlia', 'Otávio', 'Eduardo']

lista_de_tuplas = []
for i, nome in enumerate(lista_com_nomes):
    lista_de_tuplas.append((i, nome))
    
lista_de_tuplas_com_list_comprehension = [(indice,nome) for indice, nome in enumerate(lista_com_nomes)]

print(f'Lista de tuplas usando o for {lista_de_tuplas}' )
print(f'Lista de tuplas usando o list_comprehension {lista_de_tuplas_com_list_comprehension}' )

#4--

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

valor_apartamento = [i[1] for i  in aluguel if i[0]=="Apartamento"]
print(f'Valor apenas dos apartamentos usando list_comprehension {valor_apartamento}')

valor_apartamento_com_for = []
for i in aluguel:
    if i[0] == "Apartamento":
        valor_apartamento_com_for.append(i[1])
print(f'Valor apenas dos apartamentos usando for {valor_apartamento_com_for}')
    
#5--

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]

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


#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)]
vendas_2022_maior_que_6000 = [venda for venda in vendas if venda[0] == '2022' and venda[1] > 6000]
print(vendas_2022_maior_que_6000)

#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]

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

#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]
tabela = [[('Id','Quantidade','Preço','Preço Total')]+[(i,q,p,p*q) for i,q,p in zip(id,quantidade,preco)]]
print(tabela)


#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']

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

print(qtd_estado)


#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)]
dict_vazio = {}
for estado, valor in funcionarios:
    if estado not in dict_vazio:
        dict_vazio[estado] = []
    dict_vazio[estado].append(valor)

print(dict_vazio)

dict_vazio = {estado:sum(valor) for estado, valor in dict_vazio.items()}
print(dict_vazio)
1 resposta

Olá, Felipe. Como vai?

Parabéns pela resolução completa do desafio! É excelente ver como você aplicou diferentes técnicas para resolver o mesmo problema, comparando a forma clássica com o for e as abordagens mais modernas como List Comprehensions e a função map.

Sua organização demonstra que você compreendeu bem a manipulação de estruturas de dados em Python. Para agregar ainda mais valor ao seu código, selecionei alguns pontos onde você pode tornar sua escrita ainda mais eficiente e legível:

  • Dicionários com zip (Exercício 5): No seu código, você utilizou range(len(meses)) para criar o dicionário. Uma forma muito mais direta e comum em Python é usar a função zip(), que combina as duas listas par a par:
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]

dict_mes_despesas = dict(zip(meses, despesa))
print(dict_mes_despesas)
  • Otimização de contagem (Exercício 9): No exercício de contagem de estados, você utilizou estados.count(estado) dentro da compreensão de dicionário. Como a lista original tem nomes repetidos, o Python acaba contando o mesmo estado várias vezes. Para melhorar a performance, você pode iterar sobre o set(estados), que contém apenas os nomes únicos:
# Ao usar set(), o Python percorre a contagem apenas uma vez para cada estado diferente
qtd_estado = {estado: estados.count(estado) for estado in set(estados)}
  • Desempacotamento de Tuplas (Exercício 4 e 6): Em vez de acessar os índices como i[0] ou venda[1], você pode desempacotar os valores diretamente na declaração do laço. Isso deixa o código muito mais legível:
# Em vez de i[0] == "Apartamento"
valor_apartamento = [valor for tipo, valor in aluguel if tipo == "Apartamento"]
  • Agrupamento de Dados (Exercício 10): Sua lógica para agrupar os valores por estado está correta. No dia a dia, quando trabalhamos com esse tipo de agrupamento, também podemos utilizar o defaultdict do módulo collections. Ele evita que você precise verificar manualmente se a chave já existe no dicionário:
from collections import defaultdict

dict_vazio = defaultdict(list)
for estado, valor in funcionarios:
    dict_vazio[estado].append(valor)

Essas pequenas mudanças ajudam a tornar o código mais limpo e profissional, facilitando a manutenção futura. Continue praticando essas estruturas, pois elas são a base para qualquer análise de dados com bibliotecas como Pandas.

Espero que possa ter lhe ajudado!