我需要具备以下特点的类集合数据结构:
- 可哈希
- 元素无重复
- 保持顺序
- 不可变
- 可迭代
- 最好是标准库的一部分以保持简单
背景说明:
frozenset([3,1,2,2,3]) -> frozenset(1,2,3)
我的需求:
frozenset*([3,1,2,2,3]) -> frozenset*(3,1,2)
我原本想使用frozenset,但是无论是set还是frozenset都重新排列了元素。我猜想这是为了更快地进行重复检查?但无论如何我都不能有重新排序。
我需要具备以下特点的类集合数据结构:
背景说明:
frozenset([3,1,2,2,3]) -> frozenset(1,2,3)
我的需求:
frozenset*([3,1,2,2,3]) -> frozenset*(3,1,2)
我原本想使用frozenset,但是无论是set还是frozenset都重新排列了元素。我猜想这是为了更快地进行重复检查?但无论如何我都不能有重新排序。
>>> dict.fromkeys([3,1,2,2,3])
{3: None, 1: None, 2: None}
字典不是冻结的,因此如果这很重要,您可以先将所有项目放入字典中,然后从键中构建元组。
>>> tuple(dict.fromkeys([3,1,2,2,3]).keys())
(3, 1, 2)
frozenset
非常接近。主要区别在于检查元素是否在元组中需要O(n)的时间,而不是O(1)。.keys
- juanpa.arrivillaga标准库中没有这样的实现。
def no_dupe(data): return tuple(dict.fromkeys(data))
。 - juanpa.arrivillaga