W3docs

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 removed

Nota 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

python— editable, runs on the server

L'esecuzione potrebbe stampare:

banana
cherry
apple

L'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
cherry

Usa 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 cherry

Questo è 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
88

Usare 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}')
        break

Output:

First score at 90 or above: 91

Iterare 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 denied

Questo 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
5

Iterare 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

python— editable, runs on the server

Output:

Intersection:
3
4
Difference (set1 - set2):
1
2
Symmetric difference:
1
2
5
6

Consulta 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 in sui 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 ciclo while.
  • 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

Esercitati

Pratica
Which of the following is true about loop sets in Python?
Which of the following is true about loop sets in Python?
Was this page helpful?