– Tuplas - Uma "lista" muito útil e imutável – Tuplas
A estrutura das Tuplas são bem parecidas com listas.
A grande diferença entra as duas é que as Tuplas são
imutáveis.
Outra diferença está na estrutura, enquanto as listas
usam [] as tuplas usam ().
É bem mais comum usarmos tuplas quando temos
dados heterogêneos. Nas listas, usávamos listas
apenas numéricas, ou apenas não numéricas. Nas
tuplas vai ser comum vermos dados numéricos e não
numéricos juntos.
vendas = ('Lira', '25/08/2020', '15/02/1994', 2000, 'Estagiário')
print(vendas)
nome = vendas[0]
data_contratacao = vendas[1]
data_nascimento = vendas[2]
salario = vendas[3]
cargo = vendas[4]
_____________________________
('Lira', '25/08/2020', '15/02/1994', 2000, 'Estagiário')
Como falamos anteriormente, as tuplas são imutáveis. Ao tentarmos mudar o nome ‘Lira’ para ‘João’ na tupla. Conforme indicado temos um erro que indica que uma tupla não pode ter seus valores alterados.
– Unpacking em Tuplas
No exemplo anterior fizemos a atribuição das variáveis através da sua posição. Assim como fazíamos com as listas. Uma forma mais simples e usual de se fazer esta atribuição é através do unpacking. O que isso significa? Em uma única linha de código iremos atribuir os valores das tuplas para cada uma das variáveis. Assim como demonstramos no exemplo ao lado. Perceba que a ordem da atribuição corresponde a sequência da tupla.
vendas = ('Lira', '25/08/2020', '15/02/1994', 2000, 'Estagiário')
nome, data_contratacao, data_nascimento, salario, cargo = vendas
print(nome)
print(data_contratacao)
print(data_nascimento)
print(salario)
print(cargo)
____________________
Lira
25/08/2020
15/02/1994
2000
Estagiário
Vamos ver o que acontece quando esquecemos alguma das variáveis e tentamos fazer o unpacking da tupla vendas. No nosso exemplo, estamos atribuindo uma tupla com 5 itens a 4 variáveis. Esse descasamento gera um erro no Python. Nesse caso, como o número de itens da tupla é MAIOR que o número de variáveis, temos o erro que são muitos valores para unpack. Se estivéssemos em uma situação onde o número de variáveis é maior que o número de itens da tupla, seria informado que não há itens o suficiente para unpack.
vendas = ('Lira', '25/08/2020', '15/02/1994', 2000, 'Estagiário')
nome, data_contratacao, data_nascimento, cargo = vendas
_______________________________
ValueError: too many values to unpack (expected 4)
Você se lembra do ENUMERATE()? Se lembra que tínhamos como resultados os itens entre PARÊNTESES? Pois é, eram TUPLAS que agora estamos aprendendo como usar.
vendas = [1000, 2000, 300, 300, 150]
funcionarios = ['João', 'Lira', 'Ana', 'Maria', 'Paula']
for item in enumerate(vendas):
print(item)
_______________________
(0, 1000)
(1, 2000)
(2, 300)
(3, 300)
(4, 150)
Bem, se sabemos que item é uma TUPLA podemos fazer o unpacking desta tupla da mesma forma que fizemos anteriormente conforme indicado na figura. Agora, ao invés de uma tupla, “printamos” apenas os valores “separados”
vendas = [1000, 2000, 300, 300, 150]
funcionarios = ['João', 'Lira', 'Ana', 'Maria', 'Paula']
for item in enumerate(vendas):
i,vendas = item
print(i)
print(vendas)
_______________________
0
1000
1
2000
2
300
3
300
4
150
Mas não parece ser muito eficiente criarmos uma variável item que será atribuída à variável i e à variável vendas. Vamos melhorar esse código...
Veja o exemplo:
vendas = [1000, 2000, 300, 300, 150]
funcionarios = ['João', 'Lira', 'Ana', 'Maria', 'Paula']
for i, venda in enumerate(vendas):
print('O funcionário {} vendeu {}.'.format(funcionarios[i], venda))
____________________________
O funcionário João vendeu 1000.
O funcionário Lira vendeu 2000.
O funcionário Ana vendeu 300.
O funcionário Maria vendeu 300.
O funcionário Paula vendeu 150.
Substituímos a variável ITEM diretamente pelo unpacking. Aproveitamos também para melhorar nossa saída usando .FORMAT ao invés de apenas o print com valores avulsos.
Perceba como em apenas 2 linhas de código conseguimos uma informação bem fácil de ser compreendida. O unpacking tem exatamente essa função, de forma simples coletar informações de TUPLAS e LISTAS com o auxílio do FOR.
A T E N Ç Ã O !
A estrutura do unpacking é comumente esta utilizada no nosso exemplo.
• venda in vendas
• produto in produtos
• funcionario in funcionarios
Vamos agora para um desafio. Imagine que você está no seu trabalho e receba esta informação ao lado com a venda de vários produtos em datas distintas. Seu chefe, te pergunta:
1) qual foi o faturamento do iphone no dia 20/08/2020?
2) Qual o produto mais vendido (em unidades) no dia 21/08/2020?
vendas = [
('20/08/2020', 'iphone x', 'azul', '128gb', 350, 4000),
('20/08/2020', 'iphone x', 'prata', '128gb', 1500, 4000),
('20/08/2020', 'ipad', 'prata', '256gb', 127, 6000),
('20/08/2020', 'ipad', 'prata', '128gb', 981, 5000),
('21/08/2020', 'iphone x', 'azul', '128gb', 397, 4000),
('21/08/2020', 'iphone x', 'prata', '128gb', 1017, 4000),
('21/08/2020', 'ipad', 'prata', '256gb', 50, 6000),
('21/08/2020', 'ipad', 'prata', '128gb', 4000, 5000)
Antes do desespero, temos sempre que analisar a situação... Como já vimos, [] simbolizam listas e () tuplas. Logo, o que temos aqui é uma lista com 8 tuplas... Dessa forma, é um pouco complicado de trabalharmos com a informação, portanto, vamos fazer o Unpacking destas tuplas de forma que as informações fiquem mais simples de serem trabalhadas.
Para fazer o unpacking precisamos de 2 coisas:
1) Identificar número de itens por tupla e seus significados;
2) Criar um for para o unpacking
Analisando os dados fornecidos da lista VENDAS podemos criar as variáveis apresentadas ao lado para cada um dos itens da tupla. Elas serão usadas dentro do FOR para a realização do unpacking. Perceba que após a execução do FOR teremos todos os itens alocados nas variáveis que acabamos de criar.
for item in vendas:
data, produto, cor, capacidade, unidades, valor_unitario = item
Agora já fizemos a estrutura para o unpacking. Vamos relembrar as perguntas do seu chefe...
1) Qual foi o faturamento do iphone no dia 20/08/2020?
Para respondermos a pergunta 1 vamos precisar usar conhecimentos já conhecidos como o IF. Aqui podemos criar uma condição que caso seja atendida calcula o faturamento.
faturamento = 0
for item in vendas:
data, produto, cor, capacidade, unidades, valor_unitario = item
if produto == 'iphone x' and data == '20/08/2020':
faturamento += unidades * valor_unitario
print('O faturamento de IPhone no dia 20/08/2020 foi de {}'.format(faturamento))
_________________________________
O faturamento de IPhone no dia 20/08/2020 foi de 7400000
2) Qual o produto mais vendido (em unidades) no dia 21/08/2020?
Para respondermos a pergunta 2 vamos usar a mesma estrutura do unpacking. Usando o mesmo conceito do IF, vamos criar a condição para o dia 21/08/2020.
Além disso, vamos precisar de duas variáveis auxiliares (produto_mais_vendido e qtde_produto_mais_vendido) para podermos armazenar o valor do produto mais vendido.
faturamento = 0
qtde_produto_mais_vendido = 0
for item in vendas:
data, produto, cor, capacidade, unidades, valor_unitario = item
if data == '21/08/2020':
if unidades > qtde_produto_mais_vendido:
produto_mais_vendido = produto
qtde_produto_mais_vendido = unidades
print('Meu produto mais vendido no dia 21/08/2020 foi o {} com {} unidades'.format(produto_mais_vendido, qtde_produto_mais_vendido))
________________________________
Meu produto mais vendido no dia 21/08/2020 foi o ipad com 4000 unidades
Nenhum comentário:
Postar um comentário