为什么在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中添加了OrderedDict
types来维护一个明确的ordereded字典。
Python也有集合 (成员必须是唯一的集合),但根据定义,它们是无序的。 sorting集只是返回一个list
。