En matemáticas, hay conjuntos y conjuntos ordenados (osets).
- conjunto : un contenedor desordenado de elementos únicos (implementado)
- oset : un contenedor ordenado de elementos únicos (No implementado)
En Python, solo los conjuntos se implementan directamente. Podemos emular osets con claves de dictado 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])
Manifestación
Se eliminan las réplicas, se conserva el orden de inserción.
list(oset)
# [1, 2, 20, 6, 210]
Operaciones tipo set en claves dictadas.
oset - b
# {1, 20, 210}
oset | b
# {1, 2, 5, 6, 20, 210}
oset & b
# {2, 6}
oset ^ b
# {1, 5, 20, 210}
Detalles
Nota: una estructura desordenada no excluye los elementos ordenados. Más bien, el orden mantenido no está garantizado. Ejemplo:
assert {1, 2, 3} == {2, 3, 1} # sets (order is ignored)
assert [1, 2, 3] != [2, 3, 1] # lists (order is guaranteed)
Uno puede estar satisfecho al descubrir que una lista y conjunto múltiple (mset) son dos más fascinantes, estructuras de datos matemáticos:
- lista : un contenedor ordenado de elementos que permite réplicas (implementado)
- mset : un contenedor desordenado de elementos que permite réplicas (NotImplemented) *
Resumen
Container | Ordered | Unique | Implemented
----------|---------|--------|------------
set | n | y | y
oset | y | y | n
list | y | n | y
mset | n | n | n*
* Un multiset se puede emular indirectamente con collections.Counter()
un mapeo de multiplicidades (recuentos) similar a un dictado .