Em matemática, existem conjuntos e conjuntos ordenados (osets).
- conjunto : um contêiner não ordenado de elementos únicos (implementado)
- oset : um contêiner ordenado de elementos únicos (NotImplemented)
Em Python, apenas conjuntos são implementados diretamente. Podemos emular osets com teclas dit regulares ( 3.7+ ).
Dado
a = [1, 2, 20, 6, 210, 2, 1]
b = {2, 6}
Código
oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
Demo
As réplicas são removidas, a ordem de inserção é preservada.
list(oset)
# [1, 2, 20, 6, 210]
Operações semelhantes a conjuntos em teclas dict.
oset - b
# {1, 20, 210}
oset | b
# {1, 2, 5, 6, 20, 210}
oset & b
# {2, 6}
oset ^ b
# {1, 5, 20, 210}
Detalhes
Nota: uma estrutura não ordenada não exclui elementos ordenados. Em vez disso, a ordem mantida não é garantida. Exemplo:
assert {1, 2, 3} == {2, 3, 1} # sets (order is ignored)
assert [1, 2, 3] != [2, 3, 1] # lists (order is guaranteed)
Pode-se o prazer de descobrir que uma lista e multiset (MSET) são dois, estruturas de dados matemáticos mais fascinantes:
- lista : um contêiner ordenado de elementos que permite replicações (implementado)
- mset : um contêiner não ordenado de elementos que permite replicações (NotImplemented) *
Resumo
Container | Ordered | Unique | Implemented
----------|---------|--------|------------
set | n | y | y
oset | y | y | n
list | y | n | y
mset | n | n | n*
* Um multiset pode ser emulado indiretamente com collections.Counter()
um mapeamento de multiplicidades (contagens) semelhante a um dicionário .