HOWTO · Python

Come unire due set in Python

Questo articolo tutorial introduce come unire due set in Python.

In questa pagina

I set di Python memorizzano elementi unici, quindi unire due set significa calcolarne l’unione: una collezione che contiene ogni elemento presente in uno dei due set, con i duplicati ridotti a uno solo. Puoi farlo con l’operatore |, il metodo union() o le forme in-place update() e |=, a seconda che tu voglia un nuovo set o preferisca modificarne uno esistente.

Unire i set con l’operatore di unione (|)

L’operatore di unione | accetta due set e restituisce un nuovo set contenente ogni elemento che compare in uno dei due. I set originali non vengono modificati.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

result_set = set1 | set2
print(result_set)
print(set1)
print(set2)

Output:

{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4}
{3, 4, 5, 6}

I valori condivisi 3 e 4 compaiono una sola volta in result_set, mentre set1 e set2 mantengono i loro elementi originali. Entrambi gli operandi di | devono essere simili a un set (set o frozenset); combinare un set con una lista usando | genera un TypeError, quindi converti prima la lista con set().

Aggiungere elementi a un set esistente con update() o |=

Quando vuoi che un set esistente assorba gli elementi di un’altra collezione invece di costruirne uno nuovo, usa il metodo update() o l’assegnazione aumentata |=. Entrambe le forme modificano il set sul lato sinistro invece di restituirne uno nuovo.

Le due forme differiscono in ciò che accettano: update() accetta qualsiasi iterabile — un set, una lista, una tupla o una stringa — mentre |= richiede un operando destro simile a un set, con le stesse restrizioni di |.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

numbers = {1, 2, 3}

numbers.update([3, 4, 5])
print(numbers)

numbers |= {6, 7}
print(numbers)

Output:

{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 6, 7}

La chiamata update() aggiunge i nuovi valori della lista direttamente a numbers, e |= unisce poi il secondo set nello stesso oggetto. Usa queste forme solo quando la mutazione è voluta, perché ogni altro riferimento a quel set vede il cambiamento.

Usare union() per unire più set o iterabili

Il metodo union() è la controparte sotto forma di metodo dell’operatore |. Restituisce un nuovo set e lascia invariati i suoi input, ma a differenza dell’operatore accetta un numero qualsiasi di argomenti, e ogni argomento può essere un iterabile qualsiasi, non solo un set.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

result_set = set1.union(set2, {7, 8}, [9, 10])
print(result_set)
print(set1)

Output:

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

Qui union() unisce un set, un letterale di set e una lista in un’unica chiamata, mentre set1 mantiene i suoi elementi originali. Quando ogni operando è già un set, a.union(b) produce lo stesso risultato di a | b.

Scegliere l’operazione in base alla necessità di un nuovo set

Scegli la forma in base al risultato che vuoi ottenere:

  • Ti serve un nuovo set e vuoi preservare gli originali: usa | quando entrambi gli operandi sono set, oppure union() quando un operando è una lista o un altro iterabile, oppure quando combini tre o più collezioni.
  • Vuoi modificare un set esistente: usa update() per qualsiasi iterabile, oppure |= quando l’operando è un set.
  • Stai leggendo codice esistente: a.union(b) e a | b significano la stessa cosa per i set, e a.update(b) e a |= b sono le loro controparti in-place.

Nella maggior parte del codice, result = set1 | set2 è la risposta diretta per unire due set; ricorri a union() quando gli operandi potrebbero non essere set, e a update() o |= solo quando la mutazione in-place è l’obiettivo.