HOWTO · Python

Remover elemento do conjunto em Python

Existem vários métodos para remover elementos de um conjunto em Python. As funções remove() e discard() removem um único elemento, pop() remove um elemento arbitrário, e o operador -, difference() e difference_update() removem vários elementos de uma só vez.

Nesta página

Este tutorial discutirá diferentes métodos para remover elementos de um conjunto em Python. Para remover um elemento, você pode usar remove(), discard() ou pop(); para remover muitos elementos de uma só vez, você pode usar o operador -, difference() ou difference_update().

Remover um único elemento com a função remove()

A função set.remove() remove um elemento específico do conjunto. Ela recebe o elemento a ser removido como argumento. Se o elemento estiver presente, ele é removido; se não estiver presente, remove() gera um KeyError. Veja o exemplo de código a seguir.

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.remove(5)
print(set1)

Saída:

{0, 1, 2, 3, 4, 6, 7, 8, 9}

Removemos o elemento 5 de set1 com remove(5) no código acima. O cenário em que o valor especificado não está presente no conjunto é mostrado no exemplo abaixo.

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.remove(51)
print(set1)

Saída:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyError: 51

Tentamos remover o valor 51 de set1. Como não há nenhum valor 51 presente em set1, a função remove() gera um KeyError.

Remover um único elemento com a função discard()

A função discard() é muito semelhante a remove(): ela remove o elemento especificado do conjunto se o valor estiver presente. A única diferença é que discard() não gera um KeyError se o valor não estiver presente no conjunto — ela simplesmente deixa o conjunto inalterado. O trecho de código a seguir mostra como remover um único elemento de um conjunto com discard().

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.discard(5)
print(set1)

Saída:

{0, 1, 2, 3, 4, 6, 7, 8, 9}

Removemos o valor 5 de set1 com a função discard(). Como discutido acima, se passarmos um valor que não está presente em set1, o código ainda é executado com sucesso e nenhuma exceção é gerada, como demonstra o exemplo a seguir.

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.discard(51)
print(set1)

Saída:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Tentamos remover 51 de set1 com a função discard(). Como o valor especificado não existe em set1, nenhum elemento é removido e nenhum erro ocorre; set1 é impresso inalterado.

Remover um elemento arbitrário com a função pop()

A função pop() remove e retorna um elemento arbitrário do conjunto. Use-a quando não importar qual elemento será removido, por exemplo ao processar os elementos um por um até o conjunto ficar vazio.

set1 = {1, 2, 3, 4, 5}
removed = set1.pop()
print(removed)
print(set1)

Saída:

1
{2, 3, 4, 5}

pop() retornou 1 e o removeu de set1. Qual elemento é retornado é arbitrário — a linguagem não garante um em particular —, portanto nunca confie que pop() removerá um valor específico. Assim como remove(), pop() gera um KeyError se o conjunto estiver vazio.

Remover vários elementos com o operador -

O operador - realiza a operação de diferença de conjuntos em Python. Ele remove todos os elementos do conjunto da direita do conjunto da esquerda e retorna o resultado na forma de um novo conjunto. Elementos do conjunto da direita que não estão presentes no conjunto da esquerda são simplesmente ignorados, e este método não gera exceções. O trecho de código a seguir mostra como remover vários elementos de um conjunto com o operador -.

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1 = set1 - set2
print(set1)

Saída:

{1, 3, 5, 7, 9}

Removemos todos os elementos de set2 de set1 com o operador - e atribuímos o conjunto resultante de volta a set1. O exemplo de código a seguir demonstra o cenário em que ambos os conjuntos não têm elementos em comum.

set1 = {1, 3, 5, 7, 9}
set2 = {2, 4, 6, 8, 0}
set1 = set1 - set2
print(set1)

Saída:

{1, 3, 5, 7, 9}

Como nenhum dos elementos do conjunto da direita está presente no conjunto da esquerda, o código é executado com sucesso e o operador - retorna o conjunto da esquerda inalterado.

Remover vários elementos com a função difference()

A função set.difference() realiza a mesma operação de diferença de conjuntos que o operador -, em forma de método. Ela recebe o conjunto cujos elementos precisam ser removidos como parâmetro de entrada, remove todos os seus elementos do conjunto chamador e retorna o resultado na forma de um novo conjunto. Veja o trecho de código a seguir.

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1 = set1.difference(set2)
print(set1)

Saída:

{1, 3, 5, 7, 9}

Removemos todos os elementos de set2 de set1 com a função difference() e armazenamos os resultados dentro de set1. O cenário da função difference() em que os valores do conjunto de entrada não estão presentes no conjunto chamador é o mesmo que o do operador -: nada é removido e nenhum erro é gerado.

Remover vários elementos no local com a função difference_update()

Os dois métodos anteriores retornam um novo conjunto, portanto o resultado precisa ser armazenado em algum lugar. A função difference_update() funciona de maneira diferente: ela atualiza o conjunto chamador no local, removendo diretamente dele todos os elementos do conjunto argumento.

set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1.difference_update(set2)
print(set1)

Saída:

{1, 3, 5, 7, 9}

Removemos todos os elementos de set2 de set1 com a função difference_update(), e o próprio set1 agora contém o conjunto resultante — diferente dos dois métodos anteriores, não foi necessário criar um novo conjunto apenas para armazenar os resultados. A função difference_update() é equivalente ao operador -= em Python.

Conclusão

Para remover um único elemento, use remove() quando o elemento deve estar presente — um elemento ausente gera um KeyError, o que revela erros cedo — e discard() quando o elemento pode estar ausente. Use pop() quando qualquer elemento servir. Para remover vários elementos de uma só vez, use o operador - ou difference() para obter um novo conjunto, ou difference_update() (equivalentemente, -=) para atualizar o conjunto no local.