Un oggetto set (NdT: insieme) è una collezione non ordinata di valori immutabili. Gli usi comuni includono l'esame dei membri dell'insieme, la rimozione dei duplicati da una sequenza, e la computazione di operazioni matematiche quali intersezione, unione, differenza, e differenza simmetrica. Nuovo nella versione 2.4.
Come altre collezioni, gli insiemi supportano x in
set
, len(set)
e for x in set
.
Essendo collezioni non ordinate, gli insiemi non registrano la
posizione degli elementi o l'ordine di inserzione. Di conseguenza,
gli insiemi non supportano l'indicizzazione, l'affettamento o altri
comportamenti tipici delle sequenze.
Esistono correntemente due tipi di insiemi built-in, set e frozenset. Il tipo set è mutabile -- il contenuto può essere cambiato usando metodi come add() e remove(). Poiché è mutabile, non ha un valore hash e non può venire usato come una chiave di dizionario o un elemento di un altro insieme. Il tipo frozenset è immutabile e supporta l'hash -- il suo contenuto non può venire alterato dopo la creazione; tuttavia, può venire usato come una chiave di dizionario o come un elemento di un altro insieme.
Le istanze di set e frozenset forniscono le seguenti operazioni:
Operazione | Equivalenza | Risultato |
---|---|---|
len(s) |
cardinalità dell'insieme s | |
x in s |
verifica x come membro di s | |
x not in s |
verifica che x non sia un membro di s | |
s.issubset(t) |
s <= t |
verifica se ogni elemento in s è in t |
s.issuperset(t) |
s >= t |
verifica se ogni elemento in t è in s |
s.union(t) |
s | t | nuovo insieme con elementi sia di s che di t |
s.intersection(t) |
s & t | nuovo insieme con elementi comuni tra s e t |
s.difference(t) |
s - t | nuovo insieme con elementi in s ma non in t |
s.symmetric_difference(t) |
s ^ t | nuovo insieme con gli elementi di s o t ma non entrambi |
s.copy() |
nuovo insieme, una copia superficiale di s |
Notate, le versioni dei metodi non operatori di union(),
intersection(), difference(),
symmetric_difference(), issubset() e
issuperset() accetteranno ogni iterabile come argomento.
Invece i loro operatori base controparte richiedono che i propri
argomenti debbano essere insiemi. Questo preclude errori di
costruzione come set('abc') & 'cbs'
in favore di un più
leggibile set('abc').intersection('cbs')
.
set e frozenset supportano il confronto tra insiemi. Due insiemi sono uguali se e solo se ogni elemento di ogni insieme è contenuto nell'altro (ognuno è un sotto insieme dell'altro). Un insieme è minore dell'altro insieme se e solo se il primo insieme è un insieme di proprietà del secondo insieme (è un sotto insieme ma non è uguale). Un insieme è più grande di un altro insieme se e solo se il primo insieme è un superinsieme proprietario del secondo insieme (è un superinsieme, ma non è uguale).
Il sotto insieme ed il confronto di uguaglianza non generalizzano ad
una funzione di ordinamento completa. Per esempio, ogni due insiemi
disgiunti sono non uguali e non sono sottoinsiemi uno dell'altro, così
tutte le seguenti uguaglianze restituiscono False
:
a<b
, a==b
o
a>b
.
Di conseguenza, gli insiemi non implementano il metodo
__cmp__.
Poichè gli insiemi definiscono solo parzialmente l'ordinamento (relazioni tra sottoinsiemi), l'output del metodo list.sort() risulta indefinito per le liste di insiemi.
Per convenienza nell'implementazione di insiemi di insiemi, i metodi
__contains__(), remove() e discard()
automaticamente cercano corrispondenze con istanze della classe
set e le loro controparti frozenset, all'interno di un
insieme.
Per esempio, set('abc') in set([frozenset('abc')])
) restituisce
True
.
La seguente tabella elenca le operazioni disponibili per classi set che non applicano l'istanza immutabile di frozenset:
Operazione | Equivalenza | Risultato |
---|---|---|
s.update(t) |
s |= t | restituisce l'insieme s con elementi aggiunti da t |
s.intersection_update(t) |
s &= t | restituisce l'insieme s dei soli valori comuni riscontrati anche in t |
s.difference_update(t) |
s -= t | restituisce l'insieme s dopo la rimozione degli elementi comuni riscontrati in t |
s.symmetric_difference_update(t) |
s ^= t | restituisce l'insieme s con elementi da s o t ma non da entrambi |
s.add(x) |
aggiunge l'elemento x all'insieme s | |
s.remove(x) |
rimuove x dall'insieme s; solleva l'eccezione KeyError se non presente | |
s.discard(x) |
rimuove x dall'insieme s se presente | |
s.pop() |
rimuove e restituisce un elemento arbitrario da s; solleva l'eccezione KeyError se non presente | |
s.clear() |
rimuove tutti gli elementi dall'insieme s |
Notate, le versioni non operatore dei metodi update(), intersection_update(), difference_update() e symmetric_difference_update() accetteranno ogni iterabile come un argomento.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.