Python versione Bignami - Insiemi
Creare insiemi
s = set()
crea un insieme vuoto, modificabiles = frozenset()
crea un insieme vuoto, immutabiles = set([1,2,3,4,5])
crea da una listas = set(file)
crea un insieme con le righe di un files = set([1, "string", 2.])
gli insiemi possono contenere valori di tipi diversi
Operazioni
Sia su set
che frozenset
:
len(s)
cardinalità dell'insieme.x in s
vero se x è membro dell'insieme.x not in s
vero se x non è membro dell'insieme.s.issubset(t)
oppures <= t
vero se s è uguale a t o sottoinsieme di t.s.issuperset(t)
oppures >= t
vero se s è uguale a t o sovrainsieme di t.s == t
vero se s contiene gli stessi elementi di t.r = s.union(t)
oppurer = s | t
crea l'insieme unione di s e t.r = s.intersection(t)
oppurer = s & t
crea l'insieme intersezione di s e t.r = s.difference(t)
oppurer = s - t
crea l'insieme degli elementi di s che non sono anche in t.s.symmetric_difference(t)
oppurer = s ^ t
crea l'insieme degli elementi che sono in s o in t, ma non in entrambi.r = s.copy()
crea un insieme che ha gli stessi elementi di s. Gli elementi di r non sono copie degli elementi di s, ma riferimenti agli stessi oggetti.
Solo su set
:
s.update(t)
oppures |= t
aggiunge a s gli elementi di t.s.intersection_update(t)
oppures &= t
toglie da s gli elementi che non sono in t: equivale as = s & t
.s.difference_update(t)
oppures -= t
toglie da s gli elementi che sono in t; equivale as = s - t
.s.symmetric_difference_update(t)
oppures ^= t
equivale as = s ^ t
.s.add(x)
aggiunge a s l'elmento x.s.remove(x)
toglie da s l'elemento x. Lancia l'eccezioneKeyError
se x non è in s.s.discard(x)
toglie da s l'elemento x. Non fa niente se x non è in s.x = s.pop()
toglie un elemento arbitrario da s e lo restituisce; lancia l'eccezioneKeyError
se s è l'insieme vuoto.s.clear()
rimuove tutti gli elementi da s.
Esempi
# Stampa in output le entry di /etc/passwd relative agli username dati a
# linea di comando
wanted = set(sys.argv[1:])
for line in open("/etc/passwd"):
if line.split(":")[0] in wanted:
print line[:-1]
# Stampa la lista degli username che sono in /etc/passwd ma non in
# /etc/shadow
passwd = set()
for line in open("/etc/passwd"):
passwd.add(line.split(":")[0])
shadow = set()
for line in open("/etc/shadow"):
shadow.add(line.split(":")[0])
for user in passwd - shadow:
print user