Le variabili Set in Python
Nel linguaggio Python i Set sono variabili vettore che includono un insieme di elementi non ordinati e non duplicati.
set([elemento1, elemento2, ... , elemento n]);
In alternativa si possono usare le parentesi graffe senza usare la parola set.
{ elemento1, elemento2, ... , elemento n }
Le variabili Set possono essere modificate con tutte le operazioni della teoria degli insiemi ( unione, differenza e intersezione, intersezione asimmetrica, ecc. ).
Nota. Quando si passa una stringa come parametro della parola chiave set tra parentesi tonde, il comando crea un insieme con i caratteri della stringa. L'insieme è composto dai caratteri senza ripetizioni. Ad esempio, la lettera "a" è presente due volte nel nome "Andrea" ma è un solo elemento dell'insieme.
Un esempio pratico di Set
Nel seguente esempio assegno tre nomi di città alla variabile city:
city = set(["Milano", "Roma", "Torino"])
Potrei anche fare l'assegnazione senza la parola chiave set digitando
city = { "Milano", "Roma", "Torino" }
Poi assegno tre nomi di capitali europee alla variabile capitali
capitali = set(["Roma", "Parigi", "Londra"])
Si tratta di due variabili Set.
A questo punto posso usare le due variabili Set per effettuare tutte le principali operazioni dell'insiemistica.
Operazione | Operatore | Esempio |
Unione ( OR ) | | | city | capitali |
Intersezione ( AND ) | & | city & capitali |
Differenza Interferenza asimmetrica |
- | city - capitali |
Interferenza simmetrica (XOR) | ^ | city ^ capitali |
Unione degli insiemi
Per creare un insieme unione di altri due insiemi utilizzo il simbolo | dell'operatore logico OR.
print ( city | capitali )
Il risultato di questa operazione è il seguente:
{'Torino', 'Milano', 'Parigi', 'Londra', 'Roma'}
Pur appartenendo a entrambi gli insiemi, l'elemento "Roma" appare una sola volta nell'insieme unione.
In alternativa, per unire due insiemi posso anche utilizzare il metodo union() delle variabili set
city.union(capitali)
Il risultato è lo stesso.
Intersezione tra insiemi
Per trovare gli elementi presenti in entrambe le variabili Set utilizzo l'operatore AND (&)
print ( city & capitali )
Il risultato di questa operazione è il seguente:
Roma
L'elemento "Roma" è l'unico a essere presente in entrambi i set.
In alternativa, per intersecare i due insiemi posso anche usare il metodo intersection() delle variabili set
city.intersection(capitali)
Il risultato è lo stesso.
La differenza tra insiemi
Per trovare gli elementi presenti nel primo Set che non sono inclusi nel secondo ( differenza tra insiemi o intersezione asimmetrica ) scrivo nel seguente modo:
print ( capitali - city )
Il risultato dell'operazione è il seguente:
Parigi, Londra
L'elemento "Roma" viene escluso perché è incluso anche nel secondo Set ( city ).
In alternativa, per ottenere la differenza tra due insiemi posso anche usare il metodo difference() delle variabili set
capitali.difference(city)
Il risultato è lo stesso.
Cos'è l'intersezione asimmetrica? L'intersezione asimmetrica mette a confronto due Set e individua gli elementi che sono presenti soltanto in uno dei due Set.
Intersezione simmetrica ( XOR )
Per trovare gli elementi che appartengono a uno dei due insiemi ma non a entrambi, utilizzo il simbolo ^ dell'intersezione simmetrica ( XOR ).
print ( capitali ^ city )
Il risultato dell'operazione è il seguente:
{'Torino', 'Milano', 'Parigi', 'Londra'}
L'elemento "Roma" viene escluso perché è presente in entrambi gli insiemi.
In alternativa, per calcolare l'intersezione simmetrica (o differenza simmetrica) posso anche usare il metodo symmetric_difference() delle variabili set
capitali.symmetric_difference(city)
Il risultato è lo stesso.
Nota. I metodi union(), intersection(), difference() e symmetric_difference() hanno un vantaggio rispetto agli operatori, in quanto posso utilizzarli anche tra una variabile set e un altro tipo di oggetto iterabile. Viceversa, gli operatori posso usarli solo tra due variabili di tipo set..
Qual è la differenza tra liste e set in Python
Sia una lista che un Set possono essere modificate.
Tuttavia, una variabile Set non può contenere dei valori duplicati al suo interno.
Viceversa, una lista può contenere anche gli stessi valori ripetuti.
Come di distingue una lista da un Set? Nell'assegnazione dei valori a una variabile Set si utilizzano le parentesi tonde all'esterno e le parentesi quadre all'interno. In una lista, invece, si usano soltanto le parentesi quadre mentre in una tupla soltanto quelle tonde.
La set comprehension
La comprehension delle liste si applica anche agli insiemi.
A differenza delle liste, nel caso degli insiemi il risultato non contiene valori duplicati.
Esempio
In questo script seleziono tutti i resti della divisione per due.
numeri=[1 2 3 4 5 6 7 8 9]
resti={n % 3 for n in numeri}
Il risultato dell'elaborazione è il seguente:
{0, 1, 2}
I resti della divisione per 3 dei numeri da 1 a 9 sono 0, 1 e 2. Senza duplicati.
Come verificare se un valore è nel Set
Per controllare se un particolare valore si trova nell'insieme set posso usare l'operatore in
x in nomeset
Dove x è l'elemento da cercare nell'insieme.
Si tratta di un'espressione booleana. Se l'elemento esiste nell'insieme l'espressione è true. Viceversa è false.
Esempio
In queste due righe di codice definisco il set city e controllo se l'elemento "Roma" appartiene al set.
city = set(["Milano", "Roma", "Torino"])
if ("Roma" in city):
print("esiste")
L'elemento "Roma" esiste nel set city. Quindi l'output del programma è
esiste
E così via.