1
resposta

Questão 8

Fiz o exercício de forma diferente da resolução do instrutor:

# base dos dados
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]
total = [(x*y) for x in quantidade for y in preco]
cabecalho = ('ID', 'Quantidade', 'Preco', 'Total')

#cração da lista com os números
dados = list(zip( id, quantidade, preco, total))

#criação da tabela com os dados
tabela = [cabecalho] + dados

print(tabela)
1 resposta

Olá, Amanda! Tudo bem?

Analisando a sua resolução para a Questão 8, notei que você teve uma excelente iniciativa ao tentar usar List Comprehension, mas há um detalhe técnico importante na forma como o cálculo do total foi estruturado que pode gerar resultados inesperados.

O problema do "Loop Duplo"

Ao escrever total = [(x*y) for x in quantidade for y in preco], o Python está criando o que chamamos de produto cartesiano. Isso significa que ele está multiplicando cada elemento da lista quantidade por todos os elementos da lista preco. Como cada lista tem 10 itens, sua lista total acabará com 100 elementos ($10 \times 10$), em vez de apenas 10.

Para que o cálculo seja feito par a par (o primeiro de um pelo primeiro do outro), a forma mais correta e "Pythônica" seria:

1. Corrigindo com zip na List Comprehension

Você pode "zipar" as duas listas dentro da própria compreensão:
total = [q * p for q, p in zip(quantidade, preco)]

Desta forma, o Python entende que deve pegar o item na posição 0 de quantidade, multiplicar pelo item na posição 0 de preco, e assim por diante.

2. Otimizando a estrutura da Tabela

Sua lógica de unir o cabecalho com os dados usando o operador + está correta e é muito eficiente para criar uma lista de tuplas estruturada.

Veja como o código ficaria ajustado:

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]

# Cálculo corrigido par a par
total = [q * p for q, p in zip(quantidade, preco)]

cabecalho = ('ID', 'Quantidade', 'Preco', 'Total')
dados = list(zip(id, quantidade, preco, total))

tabela = [cabecalho] + dados
print(tabela)

Por que isso é importante?

Se você rodar o seu código original e verificar o tamanho da lista tabela, verá que os IDs de 0 a 9 não vão se alinhar corretamente com os totais, pois haverá muito mais totais do que IDs.

Você chegou a notar que a lista final ficou muito maior do que o esperado ou o zip acabou "cortando" os valores extras sem você perceber?