lettura facile

La differenza simmetrica tra insiemi in Python

In questa lezione ti spiego come si calcola la differenza simmetrica tra due insiemi nel linguaggio Python.

Cos'è la differenza simmetrica tra due insiemi? La differenza simmetrica tra due insiemi A e B è un insieme di elementi che appartengono a uno degli insiemi ma non appartengono a entrambi. In altre parole, la differenza simmetrica tra A e B è composta dagli elementi presenti in A che non sono presenti in B, e dagli elementi presenti in B che non sono presenti in A. Può essere definita come l'unione delle differenze A-B e B-A $$ (A - B) ∪ (B - A) $$ Ad esempio, considera due insiemi $$ A = \{ 1, 2, 3 \} $$ $$ B = \{ 2, 3, 4 \} $$ La differenza simmetrica tra A e B è l'insieme $$ (A - B) ∪ (B - A) = \{ 1 \} ∪ \{ 4 \} = \{ 1, 4 \} $$.

Puoi ottenere la differenza simmetrica in Python seguendo una di queste vie.

L'operatore di differenza simmetrica A^B

Per calcolare la differenza simmetrica tra due insiemi puoi utilizzare l'operatore ^

A^B

Ti faccio un esempio pratico.

Crea due insiemi nelle variabili A e B usando la funzione set().

>>> A=set([1,2,3,4,5])
>>> B=set([4,5,6,7])

Digita C=A^B sul terminale di Python

>>> C=A^B

Il risultato è la differenza simmetrica dei due insiemi

>>> C
{1, 2, 3. 6. 7}

L'insieme della differenza simmetrica contiene gli elementi che sono presenti in uno dei due insiemi ma non nell'altro.

$$ (A - B) ∪ (B - A) = \{ 1,2,3 \} ∪ \{ 6,7 \} = \{ 1, 2,3,6,7 \} $$

In questo caso sono gli elementi 1, 2, 3, 6, 7.

Il metodo symmetric_difference()

Puoi ottenere la differenza simmetrica tra due insiemi anche usando il metodo .symmetric_difference() delle variabili set.

A.symmetric_difference(B)

Ti faccio un esempio pratico.

Crea due insiemi A e B

>>> A=set([1,2,3,4,5])
>>> B=set([4,5,6,7])

Assegna alla variabile D il risultato dell'operazione A.symmetric_difference(B)

>>> D=A.symmetric_difference(B)

In alternativa puoi anche scrivere D=set.difference(A,B). Il risultato è sempre lo stesso.

>>> D=set.symmetric_difference(A,B)

Il risultato è la differenza simmetrica dei due insiemi

>>> D
{1, 2, 3, 6, 7}

L'insieme della differenza simmetrica (D) è composto dagli elementi presenti nel primo insieme (A) ma non nel secondo (B) e dagli elementi presenti nel secondo insieme (B) ma non nel primo (A).

$$ (A - B) ∪ (B - A) = \{ 1,2,3 \} ∪ \{ 6,7 \} = \{ 1, 2,3,6,7 \} $$

In questo caso sono gli elementi 1, 2, 3, 6, 7.

Cosa cambia tra l'operatore A^B e il metodo symmetric_difference(A,B)? Entrambi i metodi ti permettono di calcolare la differenza simmetrica tra due insiemi, Tuttavia, il metodo .symmetric_difference() è più completo. Ad esempio, puoi usare il metodo symmetric_difference() tra variabili set e altri oggetti iterabili (liste, tuple, ecc.). Ad esempio, crea una variabile set A e una lista E

>>> A=set([1,2,3,4,5])
>>> E=[4,5,6,7]

Il metodo .symmetric_difference() elabora e restituisce la differenza simmetrica tra l'insieme (A) e la lista (E) anche se si tratta di oggetti con una struttura diversa. Il risultato è un insieme.

>>> A.symmetric_difference(E)
{1, 2, 3, 6, 7}

Viceversa, l'operatore ^ puoi usarlo solo tra variabili del tipo set (insiemi). Se provi ad elaborare il comando A^E il linguaggio Python restituisce un errore perché la variabile E è una lista.

>>> A^E
Traceback (most recent call last):
TypeError: unsupported operand type(s) for ^: 'set' and 'list'

Inoltre, ricorda che a differenza di altri metodi delle variabili set, il metodo symmetric_difference() ti permette di lavorare solo tra due insiemi. Se utilizzi il metodo symmetric_difference() con tre o più insiemi Python restituisce un errore. Ad esempio, definisci tre insiemi A, B e C

>>> A=set([1,2,3,4,5])
>>> B=set([4,5,6,7])
>>> C=set([2,4,6,8])

Poi calcola la differenza simmetrica usando il metodo symmetric_difference()

>>> D=A.symmetric_difference(B,C)

In questo caso Python restituisce un messaggio di errore

D=A.symmetric_difference(B,C)
TypeError: set.symmetric_difference() takes exactly one argument (2 given)

Se vuoi ottenere la differenza simmetrica tra tre insiemi puoi intersecare le differenze di ogni insieme rispetto agli altri e unire i risultati.

D=( (A-B)&(A-C) ) | ( (B-A)&(B-C) ) | ( (C-A)&(C-B) )

Il risultato è un insieme con gli elementi che appartengono a un solo insieme tra A, B e C ma non agli altri. In questo caso sono gli elementi 1, 3, 7, 8.

>>D
{1, 3, 7, 8 }

Il metodo symmetric_difference_update()

Il metodo symmetric_difference_update() calcola la differenza simmetrica tra due insiemi modificando il contenuto dell'insieme viene applicato.

A.symmetric_difference_update(B)

Ti faccio un esempio pratico.

Crea due insiemi A, B

>>> A=set([1,2,3,4,5])
>>> B=set([4,5,6,7])

Digita A.symmetric_difference(B) sulla riga di comando di Python

>>> A.symmetric_difference_update(B)

Il risultato è l'insieme della differenza simmetrica A=(A-B)U(B-A) composto dagli elementi

>>> A
{1, 2, 3, 6, 7}

In questo caso il risultato modifica il contenuto dell'insieme A.

Qual è la differenza tra i metodi symmetric_difference e symmetric_difference_update? In entrambi i casi calcoli la differenza simmetrica tra due insiemi. Il metodo symmetric_difference_update modifica il contenuto del primo insieme mentre il metodo symmetric_difference crea un nuovo insieme senza modificare gli altri insiemi usati nell'operazione.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin