W3docs

Rimuovere Elementi da un Set

Scopri come rimuovere elementi da un set Python con discard(), remove(), pop(), clear() e difference_update(), con esempi e avvertenze.

I set di Python sono mutabili, quindi puoi rimuovere elementi in qualsiasi momento. Il linguaggio offre diversi metodi per la rimozione — ognuno con un comportamento diverso quando l'elemento è assente o quando vuoi rimuovere più di un elemento alla volta. Scegliere il metodo giusto previene i bug e rende le tue intenzioni chiare a chi legge il codice.

Questo capitolo tratta:

  • discard() — rimuove un elemento, nessun errore se assente
  • remove() — rimuove un elemento, solleva KeyError se assente
  • pop() — rimuove e restituisce un elemento arbitrario
  • clear() — rimuove tutti gli elementi, lasciando un set vuoto
  • difference_update() — rimuove molti elementi con una singola chiamata
  • Rimozione condizionale con un ciclo e con le set comprehension

Se sei nuovo ai set, leggi prima Python Sets. Per aggiungere elementi a un set, consulta Add Set Items.

Il Metodo discard()

discard() rimuove l'elemento specificato dal set. Se l'elemento non è presente, il metodo non fa nulla — non viene sollevata alcuna eccezione. È la scelta più sicura quando non sei sicuro che l'elemento esista.

Sintassi

set.discard(element)
  • element — il valore da rimuovere.
  • Valore restituito: None. Il set viene modificato sul posto.

Rimozione di un elemento presente

Scarta un elemento che esiste nel set

python— editable, runs on the server

Scartare un elemento assente è sicuro

fruits = {'apple', 'banana', 'cherry'}
fruits.discard('mango')   # 'mango' is not in the set
print(fruits)
# {'apple', 'banana', 'cherry'}   — unchanged, no error

Questo rende discard() ideale nei cicli in cui non puoi essere certo che ogni elemento da rimuovere sia presente.

Il Metodo remove()

remove() rimuove anch'esso un singolo elemento, ma solleva un KeyError se l'elemento non viene trovato. Usalo quando l'elemento deve necessariamente esistere — l'errore funge da avviso precoce che qualcosa non va.

Sintassi

set.remove(element)
  • Valore restituito: None. Il set viene modificato sul posto.

Rimozione di un elemento presente

Rimuovi un elemento da un set Python

python— editable, runs on the server

Tentare di rimuovere un elemento assente solleva KeyError

fruits = {'apple', 'banana', 'cherry'}
fruits.remove('mango')
# KeyError: 'mango'

Se vuoi evitare l'errore ma usare comunque remove(), proteggi la chiamata con un controllo in, oppure passa a discard():

element = 'mango'
if element in fruits:
    fruits.remove(element)

discard() vs remove() — Differenze Principali

discard()remove()
Elemento presenteLo rimuoveLo rimuove
Elemento assenteNon fa nullaSolleva KeyError
Da usare quandoLa rimozione è opzionaleL'elemento deve esistere

Il Metodo pop()

pop() rimuove un elemento arbitrario dal set e lo restituisce. Poiché i set non sono ordinati, non puoi prevedere quale elemento verrà rimosso — dipende dalla struttura interna della tabella hash, non dall'ordine di inserimento.

Sintassi

removed = set.pop()
  • Valore restituito: l'elemento rimosso.
  • Solleva KeyError se il set è vuoto.

Estrai un elemento da un set in Python

python— editable, runs on the server

pop() su un set vuoto solleva KeyError

empty = set()
empty.pop()
# KeyError: 'pop from an empty set'

Proteggiti da questo con un semplice controllo della lunghezza:

if fruits:
    item = fruits.pop()

Quando usare pop()

pop() è utile quando devi elaborare e consumare elementi uno alla volta e l'ordine non ti interessa — per esempio, quando si svuota una coda di lavoro memorizzata come set.

Il Metodo clear()

clear() rimuove tutti gli elementi dal set, lasciandolo vuoto. L'oggetto set stesso esiste ancora; solo il suo contenuto viene eliminato.

Sintassi

set.clear()
  • Valore restituito: None.

Svuota un set in Python

python— editable, runs on the server

set() è il modo in cui Python mostra un set vuoto. Python non può usare {} per un set vuoto perché quella notazione indica già un dizionario vuoto.

Il Metodo difference_update()

difference_update() rimuove ogni elemento presente in un dato iterabile dal set, con una singola chiamata. È l'equivalente in-place dell'operatore - (differenza).

Sintassi

set.difference_update(iterable)
  • iterable — un set, una lista, una tupla o qualsiasi altro iterabile i cui elementi vuoi rimuovere.
  • Gli elementi dell'iterabile non presenti nel set vengono ignorati silenziosamente.
  • Valore restituito: None. Il set viene modificato sul posto.

Rimuovi più elementi alla volta

numbers = {1, 2, 3, 4, 5}
numbers.difference_update({2, 4})
print(numbers)
# {1, 3, 5}

Confronta questo con la creazione di un nuovo set tramite l'operatore -, che lascia l'originale invariato:

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}

Usa difference_update() quando vuoi modificare il set esistente; usa - quando hai bisogno di un nuovo set e vuoi preservare l'originale.

Rimozione di Più Elementi con un Ciclo

Quando gli elementi da rimuovere non sono noti in anticipo, raccoglili prima, poi chiama discard() in un ciclo. Non modificare un set mentre lo si itera — ciò solleva un RuntimeError.

Schema corretto — raccogli prima i candidati, poi rimuovi

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'}

Filtrare con una Set Comprehension

Se vuoi mantenere solo gli elementi che soddisfano una condizione, una set comprehension produce un nuovo set lasciando intatto l'originale:

Mantieni solo i numeri pari

nums = {1, 2, 3, 4, 5, 6}
evens = {x for x in nums if x % 2 == 0}
print(evens)
# {2, 4, 6}

Questo è preferibile quando hai bisogno di preservare il set originale o assegnare il risultato a una nuova variabile. Per set di grandi dimensioni, è anche leggermente più leggibile rispetto alla modifica in-place.

Consulta Loop Sets per altri schemi di iterazione sui set.

Riferimento Rapido ai Metodi

MetodoRimuoveElemento assenteRestituisce
discard(x)Elemento xIgnoratoNone
remove(x)Elemento xKeyErrorNone
pop()Elemento arbitrarioKeyError (se vuoto)Elemento rimosso
clear()Tutti gli elementin/aNone
difference_update(it)Tutti gli elementi in itIgnoratoNone

Per un riferimento completo di tutti i metodi dei set, consulta Set Methods. Per imparare a iterare su un set, consulta Loop Sets.

Pratica

Pratica
Which of the following methods can be used to remove items from a set in Python?
Which of the following methods can be used to remove items from a set in Python?
Was this page helpful?