我需要具有这些属性的类似集合的数据结构:
发生了什么:
frozenset([3,1,2,2,3]) -> frozenset(1,2,3)
我需要什么:
frozenset*([3,1,2,2,3]) -> frozenset*(3,1,2)
我以为我可以使用frozenset但是集合和frozensets 重新排列元素。我认为这是为了更快的重复检查? 但无论如何我不能重新排序。
答案 0 :(得分:1)
从 Python 3.7 开始,dicts 不再对元素重新排序,而是保证保留插入顺序。您可以使用字典,其中键是您的设置项,而值将被忽略。
>>> 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) 时间。