Manipulando listas
Como manipular uma lista em Python
Depois de conhecer o que são listas e como elas funcionam, é hora de aprender a mexer nos valores dentro delas. Listas são mutáveis, e isso significa que você pode alterar, remover, adicionar ou reorganizar itens quando quiser.
Nesta lição, vamos explorar as operações mais comuns do dia a dia.
Alterando valores
Para alterar valores, usamos os índices e o operador de atribuição (=). No exemplo abaixo, o valor que está no índice 1 ("banana") é substituído por "morango".
1frutas = ["maçã", "banana", "uva"] 2 3frutas[1] = "morango" 4print(frutas) 5 6# Saída: 7# ['maçã', 'morango', 'uva']
Também é possível alterar um intervalo dentro da nossa lista. Aqui, trocamos o valor nos índices 1 e 2 por "manga" e "melão":
1frutas = ["maçã", "banana", "uva", "kiwi"] 2 3frutas[1:3] = ["manga", "melão"] 4print(frutas) 5 6# Saída: 7# ['maçã', 'manga', 'melão', 'kiwi']
Vale relembrar que o último número usado definir intervalos dentro das nossas listas não são incluídos no resultado. Então ele para antes da posição
3.
Adicionando itens
Listas crescem de forma dinâmica, então você pode inserir novos valores em diferentes posições. Aqui estão as formas mais comuns de adicionar itens em uma lista.
append()
Adiciona um novo item ao final da lista, mantendo todos os itens já existentes na mesma ordem.
1frutas = ["maçã", "banana"] 2 3frutas.append("uva") 4print(frutas) 5 6# Saída: 7# ['maçã', 'banana', 'uva']
insert()
Permite incluir um item em uma posição exata da lista usando seu índice. Os itens que já estavam nessa posição são empurrados para a direita.
1frutas = ["maçã", "banana", "uva"] 2 3frutas.insert(1, "laranja") 4print(frutas) 5 6# Saída: 7# ['maçã', 'laranja', 'banana', 'uva']
extend()
Adiciona todos os itens de outra lista (ou coleção de outro tipo) ao final da lista original.
1frutas = ["maçã", "banana"] 2outros = ["uva", "manga"] 3 4frutas.extend(outros) 5print(frutas) 6 7# Saída: 8# ['maçã', 'banana', 'uva', 'manga']
Removendo itens
Assim como podemos adicionar itens a uma lista, também podemos remover valores quando eles não forem mais necessários.
remove()
Remove a primeira ocorrência do valor informado. No exemplo abaixo, o Python procura por "banana" e remove esse item assim que o encontra.
1frutas = ["maçã", "banana", "uva"] 2 3frutas.remove("banana") 4print(frutas) 5 6# Saída: 7# ['maçã', 'uva']
Como somente o primeiro valor que é igual ao que passamos pro remove() é removido, outras ocorrências dele podem continuar existindo na lista:
1frutas = ["maçã", "banana", "maçã", "maçã"] 2 3frutas.remove("maçã") 4print(frutas) 5 6# Saída: 7# ['banana', 'maçã', 'maçã']
Aqui, somente a primeira "maçã" da lista é removida.
pop()
O método pop() remove um item da lista com base no índice informado. Ele também devolve o item removido.
1frutas = ["maçã", "banana", "uva"] 2 3fruta_removida = frutas.pop(1) 4 5print(frutas) 6print(fruta_removida) 7 8# Saída: 9# ['maçã', 'uva'] 10# banana
Quando o índice não é informado, o último item da lista é removido pelo pop():
1frutas = ["maçã", "banana", "uva"] 2 3frutas.pop() 4print(frutas) 5 6# Saída: 7# ['maçã', 'banana']
del
A palavra-chave del remove um item pelo índice, semelhante ao pop(), mas sem retornar o valor removido.
1frutas = ["maçã", "banana", "cereja"] 2 3del frutas[0] 4print(frutas) 5 6# Saída: 7# ['banana', 'cereja']
Limpando a lista
É útil poder remover um item da lista de cada vez, mas em algumas situações, vamos querer limpar a lista inteira.
clear()
O método clear() remove todos os itens da lista, deixando-a vazia, mas mantendo a variável existente.
1frutas = ["maçã", "banana", "uva"] 2 3frutas.clear() 4print(frutas) 5 6# Saída: 7# []
del
Além de remover itens individuais, o del também pode apagar a lista inteira. Porém, ele apaga não só a lista, mas também a variável que a guardava:
1frutas = ["maçã", "banana", "cereja"] 2 3del frutas 4print(frutas) 5 6# Saída: 7# Traceback (most recent call last): 8# File "<python-input-2>", line 1, in <module> 9# print(frutas) 10# ^^^^^^ 11# NameError: name 'frutas' is not defined
Extraindo informações da lista
Em alguns casos, queremos saber alguma informação sobre uma lista, como qual é seu tamanho ou se tem um certo item dentro dela. O Python oferece algumas funções para isso.
len()
A função len() retorna quantos itens existem dentro da lista.
1frutas = ["maçã", "banana", "uva"] 2print(len(frutas)) 3 4# Saída: 5# 3
count()
O método count() informa quantas vezes um determinado valor aparece dentro da lista.
1frutas = ["maçã", "banana", "cereja"] 2print(frutas.count("cereja")) 3 4# Saída: 5# 1
Outro exemplo:
1pontos = [1, 4, 2, 9, 7, 8, 9, 3, 1] 2print(pontos.count(9)) 3 4# Saída: 5# 2
index()
O método index() devolve a posição da primeira ocorrência do valor informado.
1frutas = ["maçã", "banana", "cereja"] 2print(frutas.index("cereja")) 3 4# Saída: 5# 2
Você também pode definir onde começar e terminar a busca. Aqui, o primeiro "cereja" é ignorado porque começamos a busca a partir do índice 4, ou seja, da palavra "manga":
1frutas = ["maçã", "banana", "cereja", "kiwi", "manga", "laranja", "cereja"] 2print(frutas.index("cereja", 4)) 3 4# Saída: 5# 6
Ordenando listas
Antes de começar a ordenar listas, vale relembrar um ponto importante visto na lição "Operadores de comparação": quando comparamos strings, a ordem segue o valor Unicode de cada caractere.
O exemplo que usamos naquele caso foi o da palavra "Zebra", que era considerada maior que a palavra "abelha" porque o Z maiúsculo tem valor Unicode menor que o a minúsculo. Essa mesma lógica se aplica quando ordenamos listas que contém textos.
sort()
O método sort() organiza os itens da lista em ordem crescente por padrão.
1numeros = [3, 1, 4, 2] 2 3numeros.sort() 4print(numeros) 5 6# Saída: 7# [1, 2, 3, 4]
Para ordenar a lista em ordem decrescente, podemos usar o valor reverse=True com o sort():
1numeros = [100, 50, 65, 82, 23] 2 3numeros.sort(reverse=True) 4print(numeros) 5 6# Saída: 7# [100, 82, 65, 50, 23]
reverse()
Já o reverse() inverte a ordem atual da lista. Ele não coloca a lista em ordem crescente ou decrescente, ele apenas inverte a posição dos itens. O último vira o primeiro, e assim por diante.
1numeros = [1, 9, 2, 8] 2 3numeros.reverse() 4print(numeros) 5 6# Saída: 7# [8, 2, 9, 1]
Copiando listas
É importante saber que fazer lista2 = lista1 não cria uma cópia da lista. Vamos entender como isso funciona melhor mais pra frente, mas tanto lista1 quanto lista2 seriam duas formas de chamar a mesma lista, como se uma fosse o nome e, a outra, o apelido de uma pessoa.
O jeito correto para criar uma nova lista igual a uma que já existe é usar um dos métodos abaixo.
copy()
O método copy() cria uma cópia independente da lista original:
1frutas = ["maçã", "banana", "cereja"] 2copia = frutas.copy() 3print(copia) 4 5# Saída: 6# ['maçã', 'banana', 'cereja']
list()
A função list() também cria uma nova lista a partir de outra, funcionando como uma alternativa ao método copy().
1frutas = ["maçã", "banana", "cereja"] 2 3copia = list(frutas) 4print(copia) 5 6# Saída: 7# ['maçã', 'banana', 'cereja']
Slice [:]
Usar [:] cria uma cópia da lista utilizando fatiamento. Ele copia todos os itens do início ao fim:
1frutas = ["maçã", "banana", "cereja"] 2copia = frutas[:] 3print(copia) 4 5# Saída: 6# ['maçã', 'banana', 'cereja']
Outras operações úteis
Concatenando listas com +
O operador + junta duas listas, criando uma nova lista com os itens das duas.
1lista1 = [1, 2] 2lista2 = [3, 4] 3 4print(lista1 + lista2) 5 6# Saída: 7# [1, 2, 3, 4]
Repetindo a lista com *
O operador * repete os itens da lista pelo número de vezes informado.
1print(["a"] * 3) 2 3# Saída: 4# ['a', 'a', 'a']
Um detalhe importante
Quando você usa algo como frutas.append() ou lista.sort(), você está usando um método.
Talvez você lembre que falamos deles por alto em lições anteriores. Vamos nos aprofundar neles mais pra frente. Por enquanto, basta pensar que funcionam como uma função que cada tipo de dado tem e ir se acostumando com a ideia de usá-los.