In Python, gli insiemi sono Collezioni rappresentate da tabelle hash (sono effettivamente Dizionari verso booleani, e come questi non sono ordinati), che rappresentano oggetti sulla base della loro appartenenza o meno all’insieme stesso. Per questo motivo, come i dizionari, sono mutabili (vedere Mutabilità]]) e non permettono duplicati.
Come abbiamo visto, a differenza dei dizionari, non possono essere indicizzati (si usa l’operatore in per valutare l’appartenenza):
a = {1, 5, 12}
for i in range(1, 20):
if i in a: # i è nell'insiemeGli insiemi sono iterabili (e quindi si possono costruire loop For su di essi). Di contro, non sono indicizzabili, quindi non possono rappresentare Sequenze, e non supportano lo Slicing.
Casting in liste
Insiemi e Liste possono essere convertiti l’uno nell’altra e viceversa, usando la solita sintassi per il casting (la avevamo vista in Formattazione di stringhe):
insieme = {"Luca", "Giovanni", "Marco"}
lista = list(insieme)
nuovo_insieme = set(lista)Operazioni sugli insiemi
Gli insiemi in Python supportano, oltre alle chiare operazioni di inserzione e rimozione elementi (add() e remove()), tutta una serie di operazioni insiemistiche:
- Unione:
A | BoppureA.union(B); - Intersezione:
A & BoppureA.intersection(B); - Differenza:
A - BoppureA.difference(B); - Differenza simmetrica:
A ^ BoppureA.symmetric_difference(B). La differenza simmetrica è data dagli elementi che sono solo inAoB, e non entrambi gli insiemi; - Sottoinsieme:
A <= BoppureA.issubset(B); - Sottoinsieme proprio:
A < B; - Sovrainsieme:
A >= BoppureA.issuperset(B); - Sovrainsieme proprio:
A > B; - Disgiunzione:
A.isdisjoint(B).
Set comprehension
Sugli insiemi è disponibile una funzionalità simile alla List comprehension delle Liste e la corrispettiva funzionalità dei Dizionari. Si può infatti usare la stessa sintassi:
insieme = [<espressione> for <elemento> in <sequenza> if <condizione>]per formare insiemi a partire da sequenze arbitrarie.