– Listas Python – Métodos e Usos – Listas em Python
Nesse módulo, vamos tratar das Listas que são estruturas muito importantes e serão muito utilizadas no curso. Vamos dar uma olhada na estrutura de uma lista e algumas variações que você pode acabar encontrando por aí em outros códigos.
A estrutura da lista é essa:
Nome_da_lista = ['Item 1', Item 2', 'Item 3']
Os marcadores de uma lista são os colchetes [ ]. Dentro de uma lista teremos itens separados por VÍRGULAS ‘,’.
Caso o item seja um texto, é importante usar as aspas. Caso seja um número ou variável, não são necessárias.
Nesse módulo, vamos tratar das Listas que são estruturas muito importantes e serão muito utilizadas no curso. Vamos dar uma olhada na estrutura de uma lista e algumas variações que você pode acabar encontrando por aí em outros códigos.
Nome_da_lista = []
As listas podem ser vazias. Em breve vamos explicar como adicionar itens a elas.
As listas podem contar outras listas. Perceba no Output que temos uma lista (todas_listas) que contém as 3 listas. Percebeu também que não usamos strings nos itens? Usamos diretamente a variável
lista1 = [1,2,3,4,5]
lista2 = [6,7,8,9,10]
lista3 = [11,12,13,14,15]
todas_listas = [lista1, lista2, lista3]
print(todas_listas)
_________________
[[1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15]]
Outra forma de definir uma lista é usando uma linha para cada item. Isso vai variar de programador para programador, mas é importante que você saiba que o resultado é o mesmo. É apenas uma forma de apresentar o código.
Nome_da_lista = [
'ITEM 1',
'ITEM 2',
'ITEM 3'
]
– Índices em Lista, Consultando e Modificando Valores
Agora vamos entender como acessar os itens da lista. Lembra como fizemos com a STRING, onde o caractere podia ser acessado usando a estrutura TEXTO[POSIÇÃO]? Nas listas vamos usar o mesmo conceito:
produtos=['tv', 'celular', 'mouse', 'teclado', 'tablet']
print(produtos[1])
___________________
celular
Vamos para um outro caso agora onde temos duas listas distintas, mas que possuem informações que são complementares entre si. Vamos ver o exemplo ao lado.
produtos=['tv', 'celular', 'mouse', 'teclado', 'tablet']
0 1 2 3 4
vendas= [1000, 1500, 350, 270, 900 ]
print('As vendas de {} foram de {}'.format(produtos[1],vendas[1])
___________________
As vendas de celular foram de 1500
Aqui temos duas listas que não possuem vínculo entre si, mas têm dados complementares. Podemos usar o método .FORMAT para acessarmos os dados de produto e venda de forma simples.
A T E N Ç Ã O !
No caso acima, a posição das vendas e produtos estão coincidindo, mas não obrigatoriamente isso ocorrerá sempre que estivermos trabalhando com DUAS listas distintas. Fique atento! Mais para frente no curso vamos conhecer outros recursos para tratarmos esses casos
– Descobrindo o Índice de um item na lista
Agora que sabemos como acessar os itens da lista por seus respectivos índices, vamos aprender como fazer o inverso. Ou seja, descobrir qual o índice de um item conhecido. Nós vamos chamar esse índice de i e vamos usar a estrutura abaixo para buscar esse valor:
i = nome_da_lista.index(‘o_que_você_procura’)
Vamos para o exemplo:
produtos=['tv', 'celular', 'mouse', 'teclado', 'tablet']
i=prondutos.index('mouse')
print('O valor de i é '+ str(i))
print('O produto da posição i é '+ str(produtos[i]))
____________________________
O valor de i é 2
O produto da posição i é mouse
E se o item que estou buscando não está na lista? Como saber, ou como checar essa informação? Aqui, vamos juntar os conhecimentos que vimos até agora.
IF, conector IN, INPUT. Preparado?
Vamos lá! Imagine um programa que te dá a posição de um produto em uma lista baseado na informação fornecida por um usuário.
produtos = ['tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno']
estoque = [100,150,100,120,70,180,80]
produto = input('Insira o nome do produto em letra minúscula')
i = produtos.index(produto)
print(i)
Como podemos ver, caso não seja escrito no código, sempre que um usuário informar algo que não esteja na lista, o programa irá acusar um erro. Isso não é interessante tanto em termos de funcionalidade quanto de usabilidade. Sabe como resolver esse problema?
ValueError: 'geladeeeeeira' is not in list
Primeiro é muito importante entender a condição que utilizamos no IF. Perceba que ali usamos PRODUTO in PRODUTOS. Apesar de serem variáveis com nomes muito parecidos,
estamos tratando de coisas diferentes. A variável PRODUTOS é UMA lista onde todos os
produtos estão listados. Já a variável PRODUTO foi criada para receber o nome do produto digitado pelo usuário. Se o produto digitado pelo usuário existir na lista produtos (if produto in produtos), será buscado o índice desse produto e a quantidade desse produto em estoque na lista estoque. Mas se o produto não existir na lista produtos, será retornada uma mensagem informando que o produto não existe em estoque.
produto = input('Insira o nome do produto em letra minúscula')
if produto in produtos:
i = produtos.index(produto)
qtde_estoque = estoque[i]
print('Temos {} unidades de {} no estoque'.format(qtde_estoque, produto))
else:
print('{} não existe no estoque'.format(produto))
____________________________
Insira o nome do produto em letra minúscula geladeeeeeira
geladeeeeeira não existe no estoque
– Adicionar e Remover itens da Lista
Vamos entender agora como remover ou adicionar um item à nossa lista:
ADICIONAR → .APPEND
produtos = ['tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno']
produto.append('iphone')
print(produtos)
________________________
'tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno', 'iphone'
REMOVER → .REMOVE
produtos = ['tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno']
produto.remove('mouse')
print(produtos)
________________________
'tv', 'celular', 'tablet', 'teclado', 'geladeira', 'forno'
REMOVER → .POP
produtos = ['tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno']
print(produtos)
aux = produtos.pop(2)
print(produtos)
print(aux)
________________________
'tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno'
'tv', 'celular', 'mouse', 'teclado', 'geladeira', 'forno'
tablet
A T E N Ç Ã O !
Apesar de .REMOVE e .POP parecerem iguais, elas são bem diferentes.
O .REMOVE DELETA o valor da lista. Já o .POP retira esse valor da lista, mas não o DELETA, podendo SER ARMAZENADO em uma variável auxiliar como no exemplo ao lado.
Outra diferença é que o .POP se utiliza do índice, diferentemente do remove.
Vamos agora fazer o mesmo exercício que resolvemos alguns slides atrás. Se o usuário tentar remover um item que não existe na lista. Como evitar o erro? Se você se lembra bem, podemos usar o IF/ELSE para casos como esses. No entanto, existe outra forma.
Essa forma é o TRY e o EXCEPT! Vamos dar uma olhada na estrutura dele:
“:” são obrigatórios ao usar o TRY
try:
lista.remove(item que você quer tentar remover)
except:
Ação que você deseja ter caso não seja possivel remover o item.
Voltando para nosso exemplo anterior, vamos usar o TRY para evitar que ocorra um erro ao tentarmos remover um item, fornecido pelo usuário, que não existe na lista.
produtos = ['tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno']
item_usuario = input('Qual item deseja remover?')
try:
produtos.remove(item_usuario)
print(produtos)
except:
print('O produto {} não existe na lista'.format(item_usuario))
___________________________________________
Qual item deseja remover? Televisão
O produto Televisão não existe na lista
No segundo exemplo, mostramos como o TRY ocorre quando a condição é atendida. Nesse caso, removendo o item TV da lista
produtos = ['tv', 'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno']
item_usuario = input('Qual item deseja remover?')
try:
produtos.remove(item_usuario)
print(produtos)
except:
print('O produto {} não existe na lista'.format(item_usuario))
___________________________________________
Qual item deseja remover? tv
'celular', 'tablet', 'mouse', 'teclado', 'geladeira', 'forno'
– Tamanho da lista, Maior, Menor Valor
Vamos agora aprender 3 métodos que nos ajudarão a ter informações sobre as nossas listas.
LEN() – Indica o tamanho da lista (Nº de itens)
MAX() – Indica o maior item da lista
MIN() – Indica o menor item da lista
vendas = [10,50,670,16,46,87,99]
print(len(vendas))
print(max(vendas))
print(min(vendas))
______________________
7
670
10
– Juntar Listas e Ordenar
Outra atividade muito comum no dia a dia é juntar listas em uma única lista. Para fazermos isso no Python, é bem simples. Basta a utilização do método .EXTEND
produtos = ['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods']
novos_produtos = ['chromecast', 'windows phone']
produtos.extend(novos_produtos)
print(produtos)
_____________________________________
['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods'] ['chromecast', 'windows phone']
Outra forma bastante usual é a utilização do sinal ‘+’. No entanto, perceba que nesse caso é necessária a criação de uma nova variável para receber a lista. As listas originais permanecem inalteradas.
produtos = ['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods']
novos_produtos = ['chromecast', 'windows phone']
produtos_compilado = produtos + novos_produtos
print(produtos_compilado)
_____________________________________
['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods'] ['chromecast', 'windows phone']
É possível que alguns de vocês tenha se perguntado: “Posso usar o .APPEND para adicionar a lista? Vamos ver quais são as diferenças.
Perceba que usando ‘+’ foram adicionados 2 itens a uma NOVA LISTA PRODUTOS_COMPILADOS. Já usando o método .APPEND, é criado um ÚNICO ITEM que é uma LISTA DENTRO DE UMA LISTA.
produtos = ['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods']
novos_produtos = ['chromecast', 'windows phone']
print('Usando +:')
produtos_compilado = produtos + novos_produtos
print('Usando append')
produtos.append(novos_produtos)
print(produtos)
_____________________________________
Usando +:
['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods', 'chromecast', 'windows phone']
Usando append:
['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods'] ['chromecast', 'windows phone']
E se ocorrer de termos na lista nova um valor IGUAL ao já existente na lista original? Vamos ver esse caso:
produtos = ['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods']
novos_produtos = ['chromecast', 'windows phone']
produtos.extend(novos_produtos)
print(produtos)
_____________________________________
['apple tv', 'mac', 'iphone x', 'ipad', 'apple watch', 'mac book', 'airpods', 'chromecast', 'windows phone']
Perceba que quando estamos falando de listas é sim possível duplicarmos os valores
E se estivermos tratando de uma lista numérica? Até o momento só tratamos de listas não numéricas. Perceba que o efeito é exatamente o mesmo, seja com o método .EXTEND ou com o uso do “+”. Lembrando que a diferença entre os dois casos é que para o uso do “+” é necessária a criação de uma nova variável.
lista1 = [100, 50, 25, 75, 80]
lista2 = [700, 10, 80, 90, 20]
lista1.extend(lista2)
print(lista1)
lista1 = [100, 50, 25, 75, 80]
lista2 = [700, 10, 80, 90, 20]
lista3 = lista1+lista2
print(lista3)
________________________________
[100, 50, 25, 75, 80, 700, 10, 80, 90, 20]
[100, 50, 25, 75, 80, 700, 10, 80, 90, 20]
Usando o método .SORT(), podemos ordenar uma lista. Abaixo temos um exemplo de uma lista não numérica. Algo chama atenção?
produtos = ['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
vendas = [ 1000, 1500, 15000, 270, 900, 100, 1200]
#Ordenando a lista produtos
produtos.sort()
print(produtos)
__________________
['Ipad', 'airpods', 'apple tv', 'apple watch', 'iphone x', 'mac', 'mac book']
É possível que você esteja estranhando ‘Ipad’ antes de ‘airpods’. Isso acontece pois o Python segue a lista ASCII que entende letras maiúsculas como anteriores às minúsculas. Portanto, atenção!
Vamos agora usar o nosso método .SORT() na lista vendas que é totalmente numérica.
produtos = ['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
vendas = [ 1000, 1500, 15000, 270, 900, 100, 1200]
#Ordenando a lista produtos
vendas.sort()
print(vendas)
__________________
[100, 270, 900, 1000, 1200, 1500, 15000]
Aqui, por se tratarem de números, a lista é ordenada do menor para o maior.
A T E N Ç Ã O !
Como estamos tratando de 2 listas distintas (mesmo que sejam complementares), ao usar o método .SORT as posições não são mais equivalentes. Ou seja, na lista original tínhamos que produtos[0]==‘apple tv’ e vendas[0]== 1000. Após o uso do sort, temos que ‘apple tv’ está em produtos [2] e 1000 em vendas[3].
Outra forma de utilizarmos nosso método .SORT() é usando o argumento REVERSE. Vamos para o exemplo:
Perceba que ao usarmos o reverse=True, a ordem foi invertida do maior para o menor.
Usando o reverse=False, temos o output default que é do menor para o maior.
produtos = ['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
vendas = [ 1000, 1500, 15000, 270, 900, 100, 1200]
#Ordenando a lista produtos
vendas.sort(reverse=true)
print(vendas)
__________________
[15000, 1500, 1200, 1000, 900, 270, 100]
– Print e Join em Listas
Continuando com nossas listas anteriores, vamos entender como apresentar nossas listas de forma um pouco mais simples. Imagine que você esteja mandando a lista produtos
para seu chefe e um e-mail. Como seria melhor ele receber? Todos os dados em uma linha ou como no exemplo ao lado?
produtos = ['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
vendas = [ 1000, 1500, 15000, 270, 900, 100, 1200]
print('\n'.join(produtos))
___________________________
apple tv
mac
iphone x
Ipad
apple watch
mac book
airpods
Para fazermos isso, vamos usar um método que concatena textos, o .JOIN().
Outra coisa que ainda não usamos é o ‘\n’, esse caractere para o Python significa QUEBRA DE LINHA. Por isso conseguimos esse formato de um item da lista por linha.
Vamos agora juntar conhecimentos no módulo de Strings e Listas. Vamos considerar que temos o texto atribuído a lista produtos(Atenção! Não é uma lista e sim uma string)
produtos = 'apple tv, mac, iphone x, Ipad, apple watch, mac book, airpods
Vamos transformar esse texto em uma lista. Transformar STRINGS em LISTAS facilita MUITO o trabalho!
lista_produtos = produtos.split(',')
print(lista_produtos)
_______________________
['apple tv', ' mac', ' iphone x', ' Ipad', ' apple watch', ' mac book', ' airpods']
Conseguimos! MAS algo ainda está estranho... Percebe que temos um espaço antes dos produtos? Vamos precisar tratar isso também!
Vamos adicionar um ‘ ‘(ESPAÇO) ao nosso split. Isso fará com que o Python entenda esse 2 caracteres como separadores e não apenas a ‘,’(VÍRGULA)
lista_produtos = produtos.split(', ')
print(lista_produtos)
_______________________
['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
– Outros Métodos de Lista
Para consultar outros métodos de listas do Python, você pode acessar a documentação de listas ou consultar a cartilha com métodos de listas do curso, que está disponibilizada na plataforma do curso embaixo do vídeo desta aula.
– Alterações Incrementais de Variáveis
Até agora sempre vimos variáveis que possuem valores estáticos como:
Faturamento = 1000
Essas linhas são bem comuns, mas algumas vezes você verá linhas como:
faturamento = faturamento + 500
faturamento += 500
faturamento -= 500
Não se assuste! Esses códigos são formas diferentes de se alterar uma variável. Serão bastante utilizadas quando usarmos as repetições.
faturamento = 1000
faturamento = faturamento +1000
print(faturamento) # Valor anterior de faturamento +1000
faturamento += 500
print(faturamento) # Valor anterior de faturamento +500
faturamento -= 500
print(faturamento) # Valor anterior de faturamento -500
_________________
2000
2500
2000
Vamos entender o que acontece aqui: Inicialmente, nossa variável faturamento vale 1000.
Ao usarmos faturamento + 1000 , estamos alterando o valor de faturamento para um novo valor. Isso pode parecer estranho pois temos faturamento dos dois lados, mas é bem simples . Veja sempre o lado esquerdo como RECEBE e o lado direito como ALGO QUE SERÁ ATRIBUÍDO.
Portanto, temos:
faturamento RECEBE o valor de faturamento (Aqui usaremos o valor 1000) + o valor 1000 descrito na linha de código. Logo, faturamento RECEBE 1000+1000.
Vamos para a linha de código faturamento +=500. Aqui podermos perceber que não há uma duplicidade da célula faturamento, no entanto, é exatamente a mesma coisa do exemplo anterior escrito de forma diferente. Aqui, o segundo ‘faturamento’ é suprimido.
Portanto, temos:
faturamento RECEBE o valor de faturamento( Aqui usaremos o valor 2000) + o valor 500 descrito na linha de código. Logo, faturamento RECEBE 2000+500
Da mesma forma temos a última expressão:
faturamento -= 500
faturamento RECEBE o valor de faturamento( Aqui usaremos o valor 2500) - o valor 500 descrito na linha de código.
Logo, faturamento RECEBE 2500-500
– Copiar e Igualdade de Listas
Vamos entender agora uma particularidade das listas. Até então quando fazíamos :
faturamento = 1000
Faturamento2 = 2000
Entendíamos isso como 2 variáveis distintas que não possuem relação entre si. O que é verdade!
faturamento = 1000
faturamento2 = 2000
print(faturamento)
print(faturamento2)
______________________
1000
2000
No entanto, quando tratamos de listas é um pouco diferente. No exemplo ao lado temos que a lista1=lista2.
Ao alterarmos o item [2] da lista1 é esperado que lista1 não seja mais IGUAL a lista2...
No entanto, elas são...
lista1 = ['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
lista2 = lista1
lista1[2]='iphone12'
print(lista1)
print(lista2)
__________________
['apple tv', 'mac', 'iphone 12', 'Ipad', 'apple watch', 'mac book', 'airpods']
['apple tv', 'mac', 'iphone 12', 'Ipad', 'apple watch', 'mac book', 'airpods']
Vamos para o próximo slide para entender porque.
Quando se trata de listas nossa visão precisa mudar um pouco. Considere que a lista exista independentemente das variáveis.
Ao criarmos a variável ‘lista1’ o que fazemos é dizer para que essa variável puxe suas informações dessa lista.
Ao criarmos a lista2, estamos puxando todas as informações da lista1.
Ao alterarmos a lista1, essa informação é fornecida a lista original e consequentemente a lista2.
Portanto, ao trabalharmos com cópia de listas precisamos usar um método específico para isso. Esse método é o .COPY().
Este método realmente copia a lista e cria uma nova lista, sem relação com a lista anterior. No exemplo podemos perceber que ao “printarmos” a lista 1 e lista 2 temos valores distintos.
lista1 = ['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
lista2 = lista1.copy()
lista1[2]='iphone12'
print(lista1)
print(lista2)
__________________
['apple tv', 'mac', 'iphone 12', 'Ipad', 'apple watch', 'mac book', 'airpods']
['apple tv', 'mac', 'iphone x', 'Ipad', 'apple watch', 'mac book', 'airpods']
– Lista de Listas
Vamos pegar o seguinte caso: 4 vendedores de uma loja que vende Iphone e Ipad.
Lira: IPAD: 100 | IPHONE:200
João: IPAD: 300 | IPHONE:500
Diego: IPAD: 50 | IPHONE:1000
Alon: IPAD: 900 | IPHONE:10
Antes de ir para o próximo slide pense:
• Em quantas listas podemos dividir as informações ao lado?
• Como poderíamos acessar os dados de vendas IPAD feitas pelo Diego?
Caso não tenha conseguido, não se desespere! Faz parte. O mais importante é ter esse momentos onde saímos do código e conseguimos estruturar um problema real em linhas de código. Vamos para o próximo slide e entender como poderíamos fazer ☺
Primeiro vamos entender de quantas listas estamos falando... Uma primeira lista é a lista de vendedores onde temos:
• Lira;
• João;
• Diego;
• Alon
Nossa segunda lista é a de produtos vendidos na loja:
• Ipad;
• Iphone;
A terceira já é um pouco menos intuitiva. Cada item da nossa lista será uma lista. Vamos entender melhor:
• Item 1 da lista(referente ao vendedor Lira): 100 ( vendas de Ipad), 200 (vendas de iphone);
• Item 2 da lista(referente ao vendedor João): 300 (vendas de Ipad), 500 (vendas de iphone);
• Item 3 da lista(referente ao vendedor Diego): 50 (vendas de Ipad), 1000 (vendas de iphone);
• Item 4 da lista(referente ao vendedor Alon): 900 (vendas de Ipad), 10 (vendas de iphone);
vendedores = ['Lira', 'João', 'Diego', 'Alon']
produtos = ['ipad', 'iphone']
vendas = [
[100, 200],
[300, 500],
[50, 1000],
[900, 10]
]
Ok. Mas como acessar esse itens da lista que está dentro da lista vendas? Vamos por partes. Ao fazermos print(vendas[1]) iremos acessar todas as vendas do vendedor João. 300 corresponde as vendas de ipad e 500 as vendas de iphone. Isso seria suficiente se fosse esse o nosso objetivo. Mas se quiséssemos acessar somente as vendas de iphone do vendedor João? Usando print(vendas[1][0]) podemos acessar essa informação . Vendas[1] significa acessar o segundo item da lista vendas. Já o [0] significa acessar o PRIMEIRO item da lista que está contida dentro deste item.
Nenhum comentário:
Postar um comentário