Módulo 10 - Listas em Python

Removendo itens: remove, pop e del, cada um no seu papel

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Remover um item pelo VALOR com o método remove().
  • Remover pela POSIÇÃO com pop(), aproveitando o item devolvido.
  • Usar o del para apagar por índice quando o item não interessa.
  • Prever e entender o ValueError quando o valor não está na lista.

Três jeitos de remover, três situações

Riscar um item da lista de compras, atender o primeiro da fila, desfazer o último lançamento: programas apagam itens de lista o tempo todo, e o Python oferece três ferramentas porque existem três situações diferentes. Você sabe O QUE quer tirar, mas não onde está? Use remove, que busca pelo valor. Você sabe ONDE está e quer o item na mão depois de tirar? Use pop, que devolve o removido. Você sabe onde está e o item não interessa? O del resolve. A tabela abaixo é o resumo que vale colar na parede.

FerramentaRecebeDevolve o item?Quando usar
remove(valor)O VALOR a apagarNãoSei o que quero tirar, não sei a posição
pop(indice)A POSIÇÃO (opcional)SimQuero tirar e USAR o item removido
del lista[indice]A POSIÇÃONãoSei a posição e o item não me interessa

O trio de remoção. A pergunta-chave para escolher: eu sei o valor ou a posição? Preciso do item depois?

Um aviso antes dos exemplos: as três ferramentas alteram a lista original na hora, e os itens seguintes deslizam uma casa para a esquerda para fechar o buraco. Numa lista de 5 itens, remover o do índice 1 faz o antigo índice 2 virar 1, o 3 virar 2, e assim por diante. Os índices são posições, não etiquetas coladas nos itens.

remove() e o ValueError

O remove recebe o valor e apaga a primeira ocorrência que encontrar, varrendo a lista do início. Se o valor aparece duas vezes, só a primeira sai; a segunda fica. É o método natural para a lista de compras: o usuário digita banana, e você não faz ideia de em qual posição a banana está.

compras = ["arroz", "banana", "feijão", "banana"]

compras.remove("banana")   # apaga só a PRIMEIRA banana
print(compras)
# Saída: ['arroz', 'feijão', 'banana']

remove() busca pelo valor e apaga a primeira ocorrência. A segunda banana continua lá.

E se o valor não existir? O Python levanta um ValueError com a mensagem list.remove(x): x not in list, o valor não está na lista. Assim como o IndexError da aula 2, ele derruba o programa, o que num sistema de verdade seria péssimo: imagine o usuário digitar um produto com erro de digitação e o programa fechar na cara dele. A defesa elegante usa o operador in, que a aula 6 explora a fundo: pergunte antes se o valor está lá.

compras = ["arroz", "feijão"]

# compras.remove("café")  ->  ValueError: list.remove(x): x not in list

item = "café"
if item in compras:
    compras.remove(item)
else:
    print(f"{item} não está na lista!")
# Saída: café não está na lista!

A defesa contra o ValueError: conferir com in antes de remover. O programa avisa em vez de quebrar.

pop() e del na prática

O pop tem um superpoder que o remove não tem: ele devolve o item removido, pronto para você usar. Isso o torna perfeito para filas e pilhas: chamar o próximo cliente é tirar o primeiro da lista E anunciar o nome dele, duas coisas que o pop faz numa tacada. E chamado sem argumento nenhum, pop() tira o ÚLTIMO item, o que combina com botões de desfazer: a última coisa adicionada é a primeira a sair.

fila = ["Ana", "Bruno", "Carla"]

proximo = fila.pop(0)          # tira o PRIMEIRO e o guarda
print(f"Atendendo: {proximo}")  # Saída: Atendendo: Ana
print(fila)                     # Saída: ['Bruno', 'Carla']

ultimo = fila.pop()            # sem argumento: tira o ÚLTIMO
print(f"Saiu da fila: {ultimo}")  # Saída: Saiu da fila: Carla
print(fila)                     # Saída: ['Bruno']

pop(0) tira e devolve o primeiro; pop() sem argumento, o último. O item removido fica na variável.

Já o del não é método, é um comando do próprio Python, e por isso a escrita muda: del compras[0], sem ponto e sem parênteses. Ele apaga o item do índice indicado e não devolve nada. Use quando souber a posição e não precisar do valor. Nos dois casos, pop com índice e del, pedir uma posição que não existe gera o velho conhecido IndexError, o mesmo da aula 2.

compras = ["arroz", "feijão", "café"]

del compras[1]        # apaga o índice 1 (feijão), sem devolver
print(compras)
# Saída: ['arroz', 'café']

del apaga pelo índice, seco: sem parênteses, sem devolver o item.

Com adicionar e remover no repertório, a lista virou uma estrutura viva: nasce vazia, cresce, encolhe e se transforma enquanto o programa roda. Falta a operação que dá sentido a tudo isso: visitar cada item para calcular, exibir e decidir. É o reencontro com o for, na próxima aula, e é onde a média das 30 notas da aula 1 finalmente acontece.

Teste rápido

Qual a principal diferença entre remove() e pop()?

Perguntas frequentes

Como removo TODAS as ocorrências de um valor?
O remove() só tira a primeira, então repita enquanto o valor existir: while "banana" in compras: compras.remove("banana"). É o while do módulo 8 trabalhando junto com o in que a aula 6 detalha. Existem formas mais avançadas, mas essa é honesta e clara.
O que acontece se eu chamar pop() numa lista vazia?
IndexError: pop from empty list. Não há o que tirar. A defesa é a mesma de sempre: conferir antes, com if len(lista) > 0 ou o atalho if lista, que é verdadeiro quando a lista tem pelo menos um item.
Existe um jeito de esvaziar a lista inteira de uma vez?
Existe: o método clear(), como em compras.clear(), deixa a lista vazia. Reatribuir compras = [] também funciona na maioria dos casos. Para a prática deste módulo, você não vai precisar, mas é bom reconhecer os dois quando aparecerem.
del apaga a variável ou só o item?
Depende do que você escrever. del compras[0] apaga só o item do índice 0. Já del compras, sem colchetes, apaga a variável inteira, e usar compras depois disso gera NameError. No dia a dia com listas, você quase sempre quer a versão com colchetes.
Remover um item muda os índices dos outros?
Muda: os itens à direita do removido deslizam uma casa para a esquerda, fechando o buraco. Por isso remover itens DENTRO de um for pela mesma lista dá resultados estranhos, com itens pulados. A regra segura neste nível: primeiro decida o que remover, depois remova fora do loop.
ValueError e IndexError não são a mesma coisa?
São primos, não gêmeos. IndexError é sobre POSIÇÃO: você pediu um índice que não existe. ValueError é sobre VALOR: você passou um valor que não serve, como um item que não está na lista. Saber o nome do erro ajuda a achar a causa, e o módulo 14 ensina a tratar os dois.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.