为什么在Python的标准库中没有sorting的容器?

是否有Pythondevise决定(PEP)排除了将已sorting的容器添加到Python?

OrderedDict不是已sorting的容器,因为它是按插入顺序sorting的。)

对Guido来说,这是一个有意识的devise决定(他对collections模块的添加甚至有点不情愿)。 他的目标是在select应用程序的数据types时保留“一个显而易见的方法”。

基本的概念是,如果用户足够复杂,认识到内置types不是解决问题的正确方法,那么他们也需要find合适的第三方库。

考虑到list + sort,list + heapq和list + bisect覆盖了很多依赖固有sorting的数据结构和像blist这样的软件包的用例,所以没有一个巨大的驱动来增加这个空间的复杂性,标准库。

在某些方面,它类似于标准库中没有multidimensional array,而是将这个任务交给NumPy人。

还有一个python sortedcontainers模块,实现sorting列表,字典和设置types。 它与blist非常相似,但在纯Python中实现 ,在大多数情况下更快 。

 >>> from sortedcontainers import SortedSet >>> ss = SortedSet([3, 7, 2, 2]) >>> ss SortedSet([2, 3, 7]) 

它还具有其他软件包罕见的function:

 >>> from sortedcontainers import SortedDict >>> sd = SortedDict((num, num) for num in range(100000)) >>> sd.iloc[-5] # Lookup the fifth-to-last key. 99995 

免责声明:我是sortedcontainers模块的作者。

还有一个blist模块,它包含一个sorting集数据types:

 sortedset(iterable=(), key=None) >>> from blist import sortedset >>> my_set = sortedset([3,7,2,2]) sortedset([2, 3, 7] 

不完全是一个“sorting后的容器”,但是您可能对标准库的二分模块感兴趣,该模块“提供对sorting顺序维护列表的支持,而无需在每次插入后对列表进行sorting”。

标准库中有一个heapq ,它不是完全分类,而是一种。 还有一个blist包,但它不在标准库中。

Python列表是有序的。 如果你sorting他们,他们保持这种方式。 在Python 2.7中添加了OrderedDicttypes来维护一个明确的ordereded字典。

Python也有集合 (成员必须是唯一的集合),但根据定义,它们是无序的。 sorting集只是返回一个list