1
resposta

[Projeto] Desafio

1. Soma dos elementos de cada lista

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

print("1)")
for lista in lista_de_listas:
print(sum(lista))

print("-" * 50)

2. Lista com o terceiro elemento de cada tupla

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

terceiros = [tupla[2] for tupla in lista_de_tuplas]

print("2)")
print(terceiros)

print("-" * 50)

3. Lista de tuplas com índice e nome

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

lista_tuplas = [(indice, nome) for indice, nome in enumerate(lista)]

print("3)")
print(lista_tuplas)

print("-" * 50)

4. Valores de apartamentos

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

apartamentos = [valor for tipo, valor in aluguel if tipo == 'Apartamento']

print("4)")
print(apartamentos)

print("-" * 50)

5. Dicionário de meses e despesas

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]

gastos = {mes: valor for mes, valor in zip(meses, despesa)}

print("5)")
print(gastos)

print("-" * 50)

6. Filtrar vendas de 2022 maiores que 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)
]

filtradas = [valor for ano, valor in vendas if ano == '2022' and valor > 6000]

print("6)")
print(filtradas)

print("-" * 50)

7. Rotular glicemia

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' if valor <= 70 else
'Normal' if valor <= 99 else
'Alterada' if valor <= 125 else
'Diabetes',
valor
)
for valor in glicemia
]

print("7)")
print(rotulos)

print("-" * 50)

8. Tabela de vendas

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

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

print("8)")
for linha in tabela:
print(linha)

print("-" * 50)

9. Contagem de filiais por 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']

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

print("9)")
print(contagem)

print("-" * 50)

10. Soma de funcionários por estado

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

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

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

print("10)")
print("Funcionários por estado:")
print(func_por_estado)

print("\nSoma de funcionários:")
print(soma_funcionarios)

1 resposta

Olá, Micael. Como vai?

Excelente trabalho na resolução dos desafios! É muito bom ver como você aplicou conceitos fundamentais de Python, como List Comprehensions, Dictionary Comprehensions e as funções zip e enumerate. Essas ferramentas são essenciais para escrever um código mais "pythonico", ou seja, mais conciso e eficiente.

Gostaria de destacar alguns pontos positivos e deixar algumas sugestões técnicas para complementar seus estudos:

  • Uso do zip e enumerate: No exercício 3 e no 5, você utilizou essas funções de forma perfeita. O enumerate é ideal quando precisamos do índice, e o zip é a melhor escolha para parear dados de listas diferentes.
  • Lógica Condicional: No exercício 7, a sua estrutura de if/else dentro da list comprehension ficou muito legível, mesmo sendo uma lógica aninhada. Isso facilita muito a manutenção do código.
  • Dica de Performance (Exercício 9): No desafio da contagem de filiais, você utilizou estados.count(estado) dentro de um dicionário iniciado por um set. Para listas pequenas, isso funciona bem. No entanto, para listas muito grandes, o método .count() percorre a lista inteira para cada estado único. Uma alternativa mais performática em Ciência de Dados é usar a classe Counter do módulo collections.

Veja como ficaria uma abordagem alternativa para o exercício 9, que processa a lista uma única vez:

from collections import Counter

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

# O Counter já cria um dicionário com a contagem de cada elemento
contagem_otimizada = dict(Counter(estados))

print(contagem_otimizada)
  • Agrupamento de Dados (Exercício 10): Sua solução foi criativa ao usar duas compreensões de dicionário. Uma outra forma comum de resolver esse problema de "agrupamento e soma" é percorrer a lista uma vez e acumular os valores em um dicionário comum, o que evita filtrar a lista original múltiplas vezes para cada estado.

Continue com esse foco nos exercícios práticos, pois dominar a manipulação de estruturas de dados (listas, tuplas e dicionários) é o que diferencia um bom profissional de dados no dia a dia.

Espero que possa ter lhe ajudado!