Python - Set

Ciao, aspiranti programmatori Python! Oggi, esploreremo il fantastico mondo dei Set Python. Come insegnante di informatica amichevole del quartiere, sono entusiasta di guidarvi in questo viaggio. Quindi, prenda la sua bevanda preferita, si rilassi e esploriamo insieme i set!

Python - Sets

Set in Python

Immagina di avere una borsa di biglie colorate. Ogni biglia è unica e non ti preoccupi dell'ordine in cui sono - vuoi solo sapere quali colori hai. Questo è essenzialmente quello che è un set in Python!

Un set è una raccolta non ordinata di elementi unici. È come un insieme matematico: non sono ammessi duplicati e l'ordine non importa. I set sono incredibilmente utili quando è necessario memorizzare elementi unici o eseguire operazioni di set come l'unione, l'intersezione e la differenza.

Creazione di un Set in Python

Iniziamo creando il nostro primo set. Ci sono due modi principali per creare un set in Python:

  1. Utilizzando le parentesi graffe {}
  2. Utilizzando il costruttore set()

Ecco un esempio di entrambi i metodi:

# Metodo 1: Utilizzando le parentesi graffe
frutti = {'mela', 'banana', 'ciliegia'}

# Metodo 2: Utilizzando il costruttore set()
colori = set(['rosso', 'verde', 'blu'])

print(frutti)
print(colori)

Output:

{'ciliegia', 'mela', 'banana'}
{'blu', 'rosso', 'verde'}

Notare come l'ordine degli elementi nell'output possa essere diverso da come li abbiamo definiti. Questo perché i set sono non ordinati!

Elementi Duplicati in Set

Ricorda quando ho detto che i set contengono solo elementi unici? Vediamo cosa succede quando proviamo ad aggiungere duplicati:

numeri = {1, 2, 3, 2, 4, 3, 5}
print(numeri)

Output:

{1, 2, 3, 4, 5}

Come puoi vedere, Python rimuove automaticamente i duplicati per noi. Non è fantastico?

Aggiunta di Elementi in un Set

Per aggiungere un singolo elemento a un set, utilizziamo il metodo add(). Se vogliamo aggiungere più elementi alla volta, utilizziamo il metodo update().

# Aggiunta di un singolo elemento
frutti.add('arancia')
print(frutti)

# Aggiunta di più elementi
frutti.update(['uva', 'mango'])
print(frutti)

Output:

{'ciliegia', 'mela', 'banana', 'arancia'}
{'ciliegia', 'mango', 'mela', 'banana', 'arancia', 'uva'}

Rimozione di Elementi da un Set

Ci sono diversi modi per rimuovere elementi da un set. Esploriamoli:

# Utilizzando remove() - solleva un errore se l'elemento non esiste
frutti.remove('banana')

# Utilizzando discard() - non solleva un errore se l'elemento non esiste
frutti.discard('kiwi')

# Utilizzando pop() - rimuove e restituisce un elemento arbitrario
popped = frutti.pop()
print(f"Elemento estratto: {popped}")

# Utilizzando clear() - rimuove tutti gli elementi
frutti.clear()

print(frutti)

Output:

Elemento estratto: ciliegia
set()

Test di Appartenenza in un Set

Una delle grandi cose dei set è che permettono un test di appartenenza molto veloce. Possiamo utilizzare la parola chiave in per controllare se un elemento esiste in un set:

numeri = {1, 2, 3, 4, 5}
print(3 in numeri)  # True
print(6 in numeri)  # False

Questa operazione è molto più veloce con i set rispetto alle liste, specialmente per raccolte grandi!

Operazioni sui Set

I set in Python supportano varie operazioni sugli insiemi matematici. Ecco alcune di loro:

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

# Unione
print(set1 | set2)  # o set1.union(set2)

# Intersezione
print(set1 & set2)  # o set1.intersection(set2)

# Differenza
print(set1 - set2)  # o set1.difference(set2)

# Differenza Simmetrica
print(set1 ^ set2)  # o set1.symmetric_difference(set2)

Output:

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

Compreensioni di Set Python

Proprio come le comprehension di lista, Python supporta anche le comprehension di set. Forniscono un modo conciso per creare set basati su oggetti iterabili esistenti.

# Creazione di un set di quadrati dei numeri da 0 a 9
quadrati = {x**2 for x in range(10)}
print(quadrati)

Output:

{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

Filtraggio degli Elementi Utilizzando le Compreensioni di Set

Possiamo anche utilizzare le comprehension di set per filtrare gli elementi:

# Creazione di un set di quadrati pari da 0 a 9
quadrati_pari = {x**2 for x in range(10) if x % 2 == 0}
print(quadrati_pari)

Output:

{0, 4, 16, 36, 64}

Compreensioni di Set Annidate

Anche se meno comuni, le comprehension di set annidate sono anche possibili:

# Creazione di un set di tuple (x, y) dove x e y sono cifre
coppie_cifre = {(x, y) for x in range(3) for y in range(3)}
print(coppie_cifre)

Output:

{(0, 1), (1, 2), (0, 0), (2, 0), (1, 1), (2, 2), (0, 2), (2, 1), (1, 0)}

Set Congelati

Non ultimo, parliamo dei set congelati. Un set congelato è una versione immutabile di un oggetto set Python. Mentre gli elementi di un set possono essere modificati in qualsiasi momento, gli elementi di un set congelato rimangono uguali dopo la creazione.

set_normale = {1, 2, 3}
set_congelato = frozenset([1, 2, 3])

set_normale.add(4)  # Questo funziona
# set_congelato.add(4)  # Questo solleverebbe un AttributeError

I set congelati sono particolarmente utili quando è necessario un set immutabile, come usarlo come chiave di un dizionario.

Eccoci! Abbiamo coperto i punti chiave dei set Python. Ricorda, la pratica rende perfetto, quindi non esitare a sperimentare questi concetti. Buon coding!

Ecco una tabella che riassume i principali metodi di set che abbiamo discusso:

Metodo Descrizione
add() Aggiunge un elemento al set
update() Aggiunge più elementi al set
remove() Rimuove un elemento specifico dal set (solleva un errore se non trovato)
discard() Rimuove un elemento specifico dal set (nessun errore se non trovato)
pop() Rimuove e restituisce un elemento arbitrario dal set
clear() Rimuove tutti gli elementi dal set
union() Restituisce un set contenente l'unione di set
intersection() Restituisce un set contenente l'intersezione di set
difference() Restituisce un set contenente la differenza di set
symmetric_difference() Restituisce un set con elementi in uno o l'altro set, ma non entrambi

Credits: Image by storyset