Remover Itens de Conjuntos
Aprenda a remover itens de um conjunto Python com discard(), remove(), pop(), clear() e difference_update(), com exemplos e avisos importantes.
Os conjuntos em Python são mutáveis, portanto você pode remover elementos a qualquer momento. A linguagem oferece vários métodos para remoção — cada um com um comportamento diferente quando o elemento está ausente ou quando você deseja remover mais de um item de uma só vez. Escolher o método correto evita bugs e deixa sua intenção clara para quem lê o seu código.
Este capítulo abrange:
discard()— remove um elemento, sem erro se estiver ausenteremove()— remove um elemento, levantaKeyErrorse estiver ausentepop()— remove e retorna um elemento arbitrárioclear()— remove todos os elementos, deixando um conjunto vaziodifference_update()— remove vários elementos em uma única chamada- Remoção condicional com um loop e com set comprehensions
Se você é novo em conjuntos, leia Python Sets primeiro. Para adicionar itens a um conjunto, veja Add Set Items.
O Método discard()
discard() remove o elemento especificado do conjunto. Se o elemento não estiver presente, o método não faz nada — nenhuma exceção é levantada. Esta é a opção mais segura quando você não tem certeza se o elemento existe.
Sintaxe
set.discard(element)element— o valor a remover.- Valor de retorno:
None. O conjunto é modificado no lugar.
Removendo um elemento presente
Descartar um elemento que existe no conjunto
Descartar um elemento ausente é seguro
fruits = {'apple', 'banana', 'cherry'}
fruits.discard('mango') # 'mango' is not in the set
print(fruits)
# {'apple', 'banana', 'cherry'} — unchanged, no errorIsso torna o discard() ideal em loops onde você não pode ter certeza de que todo elemento que deseja remover está presente.
O Método remove()
remove() também remove um único elemento, mas levanta um KeyError se o elemento não for encontrado. Use-o quando o elemento deve existir — o erro serve como um aviso antecipado de que algo está errado.
Sintaxe
set.remove(element)- Valor de retorno:
None. O conjunto é modificado no lugar.
Removendo um elemento presente
Remover um elemento de um conjunto Python
Tentar remover um elemento ausente levanta KeyError
fruits = {'apple', 'banana', 'cherry'}
fruits.remove('mango')
# KeyError: 'mango'Se quiser evitar o erro mas ainda usar remove(), proteja a chamada com uma verificação in, ou troque por discard():
element = 'mango'
if element in fruits:
fruits.remove(element)discard() vs remove() — Diferenças Principais
discard() | remove() | |
|---|---|---|
| Elemento presente | Remove | Remove |
| Elemento ausente | Não faz nada | Levanta KeyError |
| Use quando | A remoção é opcional | O elemento deve existir |
O Método pop()
pop() remove um elemento arbitrário do conjunto e o retorna. Como os conjuntos não são ordenados, você não pode prever qual elemento será removido — isso depende do layout interno da tabela hash, não da ordem de inserção.
Sintaxe
removed = set.pop()- Valor de retorno: o elemento removido.
- Levanta
KeyErrorse o conjunto estiver vazio.
Retirar um elemento de um conjunto em Python
pop() em um conjunto vazio levanta KeyError
empty = set()
empty.pop()
# KeyError: 'pop from an empty set'Proteja-se disso com uma simples verificação de comprimento:
if fruits:
item = fruits.pop()Quando usar pop()
pop() é útil quando você precisa processar e consumir elementos um de cada vez e não se importa com a ordem — por exemplo, ao esvaziar uma fila de trabalho armazenada como um conjunto.
O Método clear()
clear() remove todos os elementos do conjunto, deixando-o vazio. O próprio objeto do conjunto ainda existe; apenas seu conteúdo é removido.
Sintaxe
set.clear()- Valor de retorno:
None.
Limpar um conjunto em Python
set() é como Python exibe um conjunto vazio. Python não pode usar {} para um conjunto vazio porque essa notação já significa um dicionário vazio.
O Método difference_update()
difference_update() remove cada elemento de um iterável fornecido do conjunto, em uma única chamada. É o equivalente no lugar do operador - (diferença).
Sintaxe
set.difference_update(iterable)iterable— um conjunto, lista, tupla ou qualquer outro iterável cujos elementos você deseja remover.- Elementos no iterável que não estão no conjunto são silenciosamente ignorados.
- Valor de retorno:
None. O conjunto é modificado no lugar.
Remover vários elementos de uma vez
numbers = {1, 2, 3, 4, 5}
numbers.difference_update({2, 4})
print(numbers)
# {1, 3, 5}Compare isso com a criação de um novo conjunto com o operador -, que deixa o original inalterado:
numbers = {1, 2, 3, 4, 5}
result = numbers - {2, 4} # new set, 'numbers' is not modified
print(result) # {1, 3, 5}
print(numbers) # {1, 2, 3, 4, 5}Use difference_update() quando quiser mutar o conjunto existente; use - quando precisar de um novo conjunto e quiser preservar o original.
Removendo Vários Itens com um Loop
Quando os elementos a remover não são conhecidos antecipadamente, colete-os primeiro e depois chame discard() em um loop. Não modifique um conjunto enquanto itera sobre ele — isso levanta um RuntimeError.
Padrão correto — colete os candidatos primeiro, depois remova
fruits = {'apple', 'banana', 'cherry', 'avocado'}
# Step 1: collect elements to remove (do NOT modify the set here)
to_remove = [item for item in fruits if item.startswith('a')]
# Step 2: remove them
for item in to_remove:
fruits.discard(item)
print(fruits)
# {'banana', 'cherry'}Filtrando com uma Set Comprehension
Se você quiser manter apenas os elementos que atendem a uma condição, uma set comprehension produz um novo conjunto e deixa o original intacto:
Manter apenas números pares
nums = {1, 2, 3, 4, 5, 6}
evens = {x for x in nums if x % 2 == 0}
print(evens)
# {2, 4, 6}Isso é preferível quando você precisa preservar o conjunto original ou atribuir o resultado a uma nova variável. Para conjuntos grandes, também é ligeiramente mais legível do que mutar no lugar.
Veja Loop Sets para mais padrões de iteração sobre conjuntos.
Referência Rápida de Métodos
| Método | Remove | Elemento ausente | Retorna |
|---|---|---|---|
discard(x) | Elemento x | Ignorado | None |
remove(x) | Elemento x | KeyError | None |
pop() | Elemento arbitrário | KeyError (se vazio) | Elemento removido |
clear() | Todos os elementos | n/a | None |
difference_update(it) | Todos os elementos em it | Ignorado | None |
Para uma referência completa de todos os métodos de conjunto, veja Set Methods. Para aprender a iterar sobre um conjunto, veja Loop Sets.