I Set in Python
Obiettivi della pillola
Alla fine di questa pillola saprai:
- creare e inizializzare insiemi (
set); - costruire un set a partire da una lista eliminando duplicati;
- aggiungere e rimuovere elementi da un set;
- utilizzare le principali operazioni insiemistiche (
union,intersection,difference); - distinguere chiaramente un
setda unalist, in particolare sul tema dell’ordine.
Cos’è un set
Un set in Python rappresenta un insieme matematico: una collezione non ordinata di elementi unici.
Si definisce con le graffe { } o con la funzione set().
frutti = {"mela", "banana", "pera"}
vuoto = set() # insieme vuoto
Nota: Non puoi creare un set vuoto con
{}: in quel caso Python crea undict.
Creare un set a partire da una lista
Spesso vogliamo eliminare duplicati da una lista: basta convertirla in un set. Questo è un metodo rapido per avere elementi unici.
lista = [1, 2, 2, 3, 3, 3, 4]
insieme = set(lista)
print(insieme) # {1, 2, 3, 4}
Nota: Convertendo di nuovo in lista con
list(set(...))ottieni una lista senza duplicati, ma l’ordine originale potrebbe non essere preservato.
Set e ordine degli elementi
I set in Python sono non ordinati: non mantengono la sequenza di inserimento come le liste. Quando stampi o iteri su un set, l’ordine degli elementi può cambiare tra un’esecuzione e l’altra.
s = {"a", "b", "c", "d"}
print(s) # l'ordine puo' variare, ad esempio {'a', 'c', 'b', 'd'}
for x in s:
print(x) # non segue l'ordine di inserimento
Nota: Se hai bisogno di un insieme ordinato, puoi convertire il set in una lista e ordinarla:
s = {3, 1, 4, 2} ordinato = sorted(s) print(ordinato) # [1, 2, 3, 4]
Aggiungere e rimuovere elementi
add() per aggiungere
numeri = {1, 2, 3}
numeri.add(4)
print(numeri) # {1, 2, 3, 4}
remove() e discard() per eliminare
numeri = {1, 2, 3}
numeri.remove(2) # elimina 2
print(numeri) # {1, 3}
numeri.discard(99) # non genera errore se non presente
pop() e clear()
s = {"a", "b", "c"}
print(s.pop()) # rimuove e restituisce un elemento casuale
s.clear() # svuota l'insieme
print(s) # set()
Operazioni insiemistiche
Unione
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # {1, 2, 3, 4, 5}
print(a.union(b)) # stesso risultato
Intersezione
print(a & b) # {3}
print(a.intersection(b))
Differenza e differenza simmetrica
print(a - b) # {1, 2}
print(b - a) # {4, 5}
print(a ^ b) # {1, 2, 4, 5} (elementi esclusivi)
Iterare su un set
Come le liste, anche i set si possono scorrere con un ciclo, ma l’ordine non è garantito.
colori = {"rosso", "verde", "blu"}
for c in colori:
print(c)
Differenze tra set e list
- Ordine: le liste mantengono l’ordine di inserimento, i set no.
- Duplicati: le liste possono contenere elementi ripetuti, i set eliminano i duplicati automaticamente.
- Operazioni: i set hanno operazioni insiemistiche (
union,intersection, …), le liste no. - Indicizzazione: nelle liste puoi accedere con un indice (
lista[0]), nei set no.
lista = [1, 2, 2, 3]
insieme = {1, 2, 2, 3}
print(lista) # [1, 2, 2, 3]
print(insieme) # {1, 2, 3}
In breve: usa una lista quando ti serve ordine e duplicati; usa un set quando ti servono elementi unici e operazioni insiemistiche.
EC