跳转到主要内容

Sorted Containers -- 排序列表、排序字典、排序集合

项目描述

Sorted Containers 是一个Apache2许可的 排序集合库,使用纯Python编写,并且速度与C扩展相当。

Python的标准库非常出色,直到你需要一个排序集合类型。许多人会证明没有它是可以走得很远的,但当你真正需要排序列表、排序字典或排序集合时,你会面临十几种不同的实现,其中大多数使用没有良好文档和基准测试的C扩展。

在Python中,我们可以做得更好。而且我们可以用纯Python来做!

>>> from sortedcontainers import SortedList
>>> sl = SortedList(['e', 'a', 'c', 'd', 'b'])
>>> sl
SortedList(['a', 'b', 'c', 'd', 'e'])
>>> sl *= 10_000_000
>>> sl.count('c')
10000000
>>> sl[-3:]
['e', 'e', 'e']
>>> from sortedcontainers import SortedDict
>>> sd = SortedDict({'c': 3, 'a': 1, 'b': 2})
>>> sd
SortedDict({'a': 1, 'b': 2, 'c': 3})
>>> sd.popitem(index=-1)
('c', 3)
>>> from sortedcontainers import SortedSet
>>> ss = SortedSet('abracadabra')
>>> ss
SortedSet(['a', 'b', 'c', 'd', 'r'])
>>> ss.bisect_left('c')
2

上述所有操作都运行在比线性时间更快的速度。上述演示也几乎需要1GB的内存来运行。当排序列表乘以一千万时,它存储了从“a”到“e”的每个元素的十个亿个引用。每个引用在排序容器中需要8个字节。这几乎无法超越,因为它是每个对象的指针成本。它也比典型的二叉树实现(例如红黑树、AVL树、AA树、伸展树、Treap等)的66%低,其中每个节点也必须存储指向子节点的两个指针。

排序容器消除了Python排序集合的所有工作 - 使您的部署和使用Python变得简单。无需安装C编译器或预先构建和分发自定义扩展。性能是一个特性,测试覆盖率达到了100%,使用了单元测试和数小时的压力测试。

用户评价

亚历克斯·马尔泰利Python软件基金会会员

“好东西!……我喜欢将排序容器拆分成更小的“片段”以避免O(N)插入成本的简单、有效的实现思想。”

杰夫·诺普《编写Python的优美风格》和Python培训师

“最后那部分‘快如C扩展’很难相信。我需要一些性能比较来证实这一点。作者在文档中包含了这些内容。它是。”

凯文·塞缪尔Python和Django培训师

我非常惊讶,不仅因为代码质量很高(它非常易读,注释比代码还多,哇),而且实际投入在代码上的工作量也很大:文档、基准测试、实现说明。甚至git日志也很干净,单元测试在Python 2和3上都能正常运行。

马克·萨默菲尔德,为Python排序集合发出的简短呼吁

Python的“电池包含”标准库似乎缺少了一个电池。而且“我们以前从未有过它”的论调已经不再新鲜。现在是时候让Python提供一套完整的集合类,包括排序集合了。

排序容器被用于诸如:Zipline(Quantopian的算法交易库)、Angr(加州大学圣塔芭芭拉分校的二进制分析平台)、Trio(异步I/O库)和Dask Distributed(由Continuum Analytics支持的分布式计算库)等流行的开源项目中。

特性

  • 纯Python实现

  • 全面文档

  • 基准比较(替代方案、运行时间、负载因子)

  • 100%测试覆盖率

  • 数小时的压力测试

  • 性能很重要(通常比C实现更快)

  • 兼容API(几乎与旧版blist和bintrees模块相同)

  • 功能丰富(例如,获取排序字典中的五个最大键:d.keys()[-5:])

  • 实用设计(例如,SortedSet是一个Python集合,具有SortedList索引)

  • 在Python 3.7上开发

  • 在CPython 2.7、3.2、3.3、3.4、3.5、3.6、3.7和PyPy、PyPy3上测试

https://api.travis-ci.org/grantjenks/python-sortedcontainers.svg?branch=master https://ci.appveyor.com/api/projects/status/github/grantjenks/python-sortedcontainers?branch=master&svg=true

快速入门

使用pip安装排序容器很简单。

$ pip install sortedcontainers

您可以使用Python内置的help函数在解释器中访问文档。help适用于排序容器中的模块、类和方法。

>>> import sortedcontainers
>>> help(sortedcontainers)
>>> from sortedcontainers import SortedDict
>>> help(SortedDict)
>>> help(SortedDict.popitem)

文档

排序容器的完整文档可在http://www.grantjenks.com/docs/sortedcontainers/找到。

用户指南

用户指南提供了对排序容器的介绍以及广泛的功能比较和分析。

社区指南

社区指南提供了关于排序容器的发展信息,包括支持、实现和历史细节。

API 文档

API 文档提供了排序容器包中特定函数、类和模块的信息。

演讲

资源

排序容器许可证

版权所有 2014-2019 Grant Jenks

根据Apache许可证版本2.0(“许可证”)授权;除非适用法律要求或经书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证下管理许可和限制的具体语言,请参阅许可证。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

sortedcontainers-2.4.0.tar.gz (30.6 kB 查看哈希值

上传时间

构建分布

sortedcontainers-2.4.0-py2.py3-none-any.whl (29.6 kB 查看哈希值

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面