In matematica, ci sono insiemi e insiemi ordinati (osets).
- set : un contenitore non ordinato di elementi unici (implementato)
- oset : un contenitore ordinato di elementi unici (NotImplemented)
In Python, solo i set vengono implementati direttamente. Possiamo emulare oset con i normali tasti dict ( 3.7+ ).
Dato
a = [1, 2, 20, 6, 210, 2, 1]
b = {2, 6}
Codice
oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
dimostrazione
I replicati vengono rimossi, l'ordine di inserzione viene mantenuto.
list(oset)
# [1, 2, 20, 6, 210]
Operazioni di tipo set sui tasti Dict.
oset - b
# {1, 20, 210}
oset | b
# {1, 2, 5, 6, 20, 210}
oset & b
# {2, 6}
oset ^ b
# {1, 5, 20, 210}
Dettagli
Nota: una struttura non ordinata non preclude gli elementi ordinati. Piuttosto, l'ordine mantenuto non è garantito. Esempio:
assert {1, 2, 3} == {2, 3, 1} # sets (order is ignored)
assert [1, 2, 3] != [2, 3, 1] # lists (order is guaranteed)
Si può essere contenti di scoprire che una lista e un multiset (mset) sono due strutture di dati matematiche più affascinanti:
- list : un contenitore ordinato di elementi che consente repliche (implementato)
- mset : un contenitore non ordinato di elementi che consente repliche (NotImplemented) *
Sommario
Container | Ordered | Unique | Implemented
----------|---------|--------|------------
set | n | y | y
oset | y | y | n
list | y | n | y
mset | n | n | n*
* Un multiset può essere emulato indirettamente con collections.Counter()
, una mappatura dict-like delle molteplicità (conteggi).