Iterare sui Set
Impara a iterare sui set Python con cicli for, while, enumerate, break, continue e comprensioni di set con esempi chiari.
I set Python sono collezioni non ordinate di elementi unici. Poiché sono non ordinati, non è possibile accedere agli elementi tramite indice — ma è comunque possibile iterare su ogni elemento con un ciclo for, usare cicli while per consumare un set, e applicare operazioni sui set all'interno dei cicli per risolvere problemi comuni sui dati.
Questa pagina illustra come iterare sui set in Python, inclusa l'iterazione deterministica con sorted(), enumerate(), il filtraggio con break e continue, le comprensioni di set e casi d'uso pratici.
Creare un Set
Prima di iterare, è necessario un set. Puoi crearne uno con le parentesi graffe {} o con la funzione built-in set(). Consulta Python Sets per un'introduzione completa.
Creare un set in Python
# Using curly braces
fruits = {'apple', 'banana', 'cherry'}
# Using set() — useful when converting another sequence
numbers = set([1, 2, 2, 3, 4, 4, 5])
print(numbers) # {1, 2, 3, 4, 5} — duplicates are removedNota che set() applicato a una lista rimuove automaticamente i duplicati. L'ordine di output non è garantito.
Iterare su un Set con un Ciclo For
Il modo più comune per iterare su un set è il ciclo for. Python visita ogni elemento una volta, ma in un ordine arbitrario.
Iterare su un set in Python
L'esecuzione potrebbe stampare:
banana
cherry
appleL'ordine può variare ogni volta che il programma viene eseguito. Se hai bisogno di un ordine prevedibile, racchiudi il set in sorted().
Iterare in Ordine Ordinato
sorted() restituisce una lista ordinaria contenente gli elementi del set in ordine crescente. Il set originale rimane invariato.
Iterare su un set in ordine ordinato
fruits = {'apple', 'banana', 'cherry'}
for fruit in sorted(fruits):
print(fruit)Output:
apple
banana
cherryUsa sorted(my_set, reverse=True) per iterare in ordine decrescente.
Usare enumerate() con un Set
enumerate() abbina ogni elemento a un contatore. Combinato con sorted(), fornisce un indice stabile accanto a ogni elemento.
Enumerare un set in Python
fruits = {'apple', 'banana', 'cherry'}
for index, fruit in enumerate(sorted(fruits)):
print(index, fruit)Output:
0 apple
1 banana
2 cherryQuesto è utile quando è necessario numerare gli elementi in un report o etichettarli in una pipeline di dati.
Iterare con break e continue
Puoi usare break per interrompere il ciclo in anticipo e continue per saltare elementi specifici.
Usare continue per Saltare Elementi
Saltare elementi durante l'iterazione su un set
scores = {55, 72, 88, 64}
for score in sorted(scores):
if score < 60:
continue # skip failing scores
print(score)Output:
64
72
88Usare break per Interrompere in Anticipo
Interrompere un ciclo in anticipo usando break
scores = {55, 72, 88, 91, 64}
for score in sorted(scores):
if score >= 90:
print(f'First score at 90 or above: {score}')
breakOutput:
First score at 90 or above: 91Iterare su un Set con un Ciclo While
Un ciclo while combinato con pop() permette di elaborare e consumare un set elemento per elemento. Usa questo schema quando vuoi svuotare il set man mano che procedi (ad esempio, una coda di lavoro).
Usare un ciclo while per consumare un set
tasks = {'send email', 'write report', 'update database'}
while tasks:
task = tasks.pop() # removes and returns an arbitrary element
print(f'Processing: {task}')
print('All tasks done.')Output (l'ordine può variare):
Processing: update database
Processing: write report
Processing: send email
All tasks done.Dopo il ciclo, tasks è vuoto. Se hai bisogno di conservare il set originale intatto, lavora su una copia: tasks.copy().
Verifica dell'Appartenenza all'Interno di un Ciclo
Uno dei maggiori punti di forza dei set è la verifica dell'appartenenza in O(1). Verificare item in my_set è molto più veloce di verificare item in my_list per collezioni di grandi dimensioni, perché i set usano internamente una tabella hash.
Filtrare una lista usando un set per ricerche veloci
allowed_roles = {'admin', 'editor', 'viewer'}
users = ['admin', 'guest', 'editor', 'unknown']
for user in users:
if user in allowed_roles:
print(f'{user}: access granted')
else:
print(f'{user}: access denied')Output:
admin: access granted
guest: access denied
editor: access granted
unknown: access deniedQuesto schema è comune per controlli di autorizzazione, blocklist e filtraggio dei dati.
Rimuovere Duplicati da una Lista
Convertire una lista in un set all'interno di un ciclo è un modo rapido per assicurarsi di elaborare ogni valore unico una sola volta.
Rimuovere duplicati da una lista usando un set
my_list = [1, 2, 2, 3, 4, 4, 5]
unique_values = set(my_list) # duplicates removed
for value in sorted(unique_values):
print(value)Output:
1
2
3
4
5Iterare sulle Operazioni tra Set
Puoi iterare direttamente sul risultato di un'operazione tra set — unione, intersezione, differenza — senza creare una variabile intermedia.
Iterare sulle operazioni tra set in Python
Output:
Intersection:
3
4
Difference (set1 - set2):
1
2
Symmetric difference:
1
2
5
6Consulta Join Sets per maggiori informazioni sulla combinazione di set e Set Methods per l'elenco completo delle operazioni.
Comprensioni di Set
Una comprensione di set costruisce un nuovo set da un'espressione in una singola riga. La sintassi rispecchia le comprensioni di lista ma usa le parentesi graffe.
Costruire un set con una comprensione di set
# Squares of numbers 1 through 5
squares = {x**2 for x in range(1, 6)}
print(sorted(squares))Output:
[1, 4, 9, 16, 25]Puoi aggiungere una condizione per filtrare gli elementi:
Comprensione di set con un filtro
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
evens = {n for n in numbers if n % 2 == 0}
print(sorted(evens))Output:
[2, 4, 6, 8, 10]Le comprensioni di set sono più concise di un ciclo for che chiama .add() nel corpo, e comunicano l'intento in modo chiaro. Per gli equivalenti con le liste, consulta List Comprehension.
Punti Chiave
- I set sono non ordinati — non fare affidamento sull'ordine di iterazione. Usa
sorted()quando è necessario un ordine stabile. - I set contengono elementi unici — l'iterazione salta automaticamente i duplicati.
- Le verifiche di appartenenza
insui set sono O(1) — molto più veloci che sulle liste per grandi quantità di dati. pop()rimuove un elemento arbitrario ed è utile per consumare un set in un ciclowhile.- Le comprensioni di set
{expr for item in iterable}sono il modo idiomatico per costruire un set filtrato o trasformato in una riga.
Argomenti Correlati
- Python Sets — creare, aggiungere e rimuovere elementi
- Add Set Items — metodi
add()eupdate() - Remove Set Items — metodi
remove(),discard()epop() - Join Sets — unione, intersezione, differenza e altro
- Set Methods — riferimento completo per tutti i metodi dei set
- Python For Loops — il ciclo
forin profondità - Loop Lists — iterare sulle liste
- Loop Tuples — iterare sulle tuple
- Loop Dictionaries — iterare sui dizionari