Curso de Python / Listas: adicionar, remover, ordenar e copiar itens

Uma lista armazena itens em ordem e permite acrescentar, alterar e remover elementos. Ao trabalhar com listas, diferencie as operações que modificam o objeto original das que retornam uma nova lista, principalmente na ordenação e na cópia de dados.

Escolha a operação de acordo com o objetivo

Use colchetes para criar uma lista, como [3500, 8000, 2500]. O primeiro índice é 0, e um índice pode ser usado para substituir um elemento. A lista pode conter valores repetidos e tipos diferentes; para uma soma de despesas, porém, mantenha o significado e a unidade dos valores consistentes.

Objetivo Operação Comportamento importante
Acrescentar um item items.append(value) Uma lista recebida como argumento vira um único item aninhado
Acrescentar vários itens items.extend(values) Adiciona cada elemento do iterável
Remover por posição items.pop(index) Retorna o item removido; sem índice, usa o último
Remover por valor items.remove(value) Remove somente a primeira ocorrência; falha se o valor não existir

Um iterável fornece elementos que podem ser percorridos, como outra lista. Assim, append([1, 2]) acrescenta uma lista como item, enquanto extend([1, 2]) acrescenta dois números. Esses métodos não têm o mesmo efeito sobre a estrutura. O tutorial oficial sobre listas apresenta os métodos e seus resultados.

Execute as alterações e acompanhe a ordenação

Salve o código completo abaixo em UTF-8 como lists.py, na pasta do projeto. Execute python lists.py no ambiente selecionado. No macOS ou Ubuntu, fora de um ambiente virtual, use python3 se esse for o comando da instalação. Não são necessários pacotes adicionais nem arquivos de entrada.

amounts = [3500, 8000, 2500]
amounts.append(1000)
amounts[0] = 4000
removed = amounts.pop()
print(amounts, removed)
print(sorted(amounts))
print(amounts)
amounts.sort()
print(amounts)

A saída esperada é:

[4000, 8000, 2500] 1000
[2500, 4000, 8000]
[4000, 8000, 2500]
[2500, 4000, 8000]

append(1000) acrescenta um quarto valor. A atribuição ao índice 0 troca 3500 por 4000. O pop() sem argumento retira o último item e o devolve, por isso removed vale 1000 e a lista volta a ter três elementos.

Compare então a segunda e a terceira linhas de saída: sorted(amounts) apresenta uma ordem crescente, mas a lista original ainda aparece na ordem anterior. A última linha mostra a lista depois de amounts.sort(), que modifica o próprio objeto.

Diferencie alteração, retorno e cópia

Operação Retorno Efeito na lista original
items.sort() None Modifica a ordem
sorted(items) Uma nova lista Preserva a ordem anterior

Não escreva amounts = amounts.sort() esperando receber a lista ordenada. O método modifica a lista, mas seu retorno é None; a atribuição passa a ligar o nome amounts a esse retorno. Se quiser uma nova lista, use ordered = sorted(amounts). Se quiser alterar a existente, chame amounts.sort() sem atribuir o resultado. A referência de ordenação compara as duas opções.

other = amounts não copia a lista: os dois nomes se referem ao mesmo objeto. Já copied = amounts[:] cria uma nova lista externa, mas faz uma cópia rasa. Se um elemento for outra lista mutável, ele continuará compartilhado entre a original e a cópia.

Por exemplo, depois de items = [[3500], [8000]] e copied = items[:], uma alteração como copied[0].append(500) também será visível em items[0]. Trocar um elemento externo de copied, por outro lado, não troca a posição correspondente de items. A documentação de cópias rasas e profundas explica essa diferença. Ordenar também não duplica os objetos internos.

Confira listas vazias e mudanças durante a repetição

Acessar o índice 0 de uma lista vazia ou executar pop() nela provoca IndexError. remove() provoca ValueError quando o valor procurado não existe. Decida se a ausência de dados é válida ou se viola uma regra do programa antes de escolher como tratar cada situação.

Remover elementos da mesma lista que está sendo percorrida pode fazer o laço pular itens, pois as posições mudam. Quando a tarefa for filtrar valores, percorra uma cópia ou construa uma nova lista com os itens que devem permanecer. Isso torna a regra mais clara do que depender de índices que mudam durante o processo.

  1. Adicione 0 ao final dos três valores iniciais de amounts e execute novamente o programa.
  2. Após as operações de inclusão, alteração e remoção do exemplo, a lista passa a ter quatro itens. Sua soma é 14500, igual à soma dos três valores originais depois da troca para 4000, mas a ordem crescente começa com 0.
  3. Remova o zero que você acrescentou e confirme novamente as quatro linhas de saída originais.

Uma soma igual não prova que a estrutura dos dados é a mesma. Confira também a quantidade de elementos e a ordem, especialmente quando o resultado será usado por outra etapa do programa.