我需要具有这些属性的类集合数据结构:
- hashable
- 没有重复元素 维持秩序
- 的
- iterable
- 是标准库的一部分吗?要保持简单
发生了什么:
frozenset([3,1,2,2,3]) -> frozenset(1,2,3)
我需要什么:
frozenset*([3,1,2,2,3]) -> frozenset*(3,1,2)
我想我可以使用frozenset,但是同时使用set和frozenset重新排序的元素。我想这是为了更快地重复核对吧?但无论如何我不能重新排序。
从Python 3.7开始,字典不再对元素重新排序,而是保证保持插入顺序。您可以使用字典,其中键是您的集合项,值被忽略。
>>> 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)时间。
标准库中没有这样的实现