python sortedcontainers-Python实现的快速排序算法集合

介绍

Sorted Containers是Apache2许可的Sorted Collections库,用纯Python编写,并且可以像C扩展一样快速。

Python的标准库已经非常实用了,实践已经证明,即使没有一个扩展,您也可以真正走得很远。但是,当您真正需要排序列表、排序字典或排序集合时,您将面临许多不同的实现,其中大多数使用C扩展,而且没有完善的文档和基准测试。

在Python中,我们可以做得更好。我们可以用纯Python做到这一点!

>>> from sortedcontainers import SortedList>>> sl = SortedList(['e', 'a', 'c', 'd', 'b'])>>> slSortedList(['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})>>> sdSortedDict({'a': 1, 'b': 2, 'c': 3})>>> sd.popitem(index=-1)('c', 3)>>> from sortedcontainers import SortedSet>>> ss = SortedSet('abracadabra')>>> ssSortedSet(['a', 'b', 'c', 'd', 'r'])>>> ss.bisect_left('c')2

上面显示的所有操作都比线性时间快。上面的演示还占用了将近1 GB的内存。当排序列表乘以一千万时,它将存储对“ a”到“ e”中的每一个的一千万个引用。每个引用在已排序的容器中需要八个字节。这是很难克服的,因为这是指向每个对象的指针的代价。与每个节点还必须存储两个指向子节点的指针的典型二叉树实现(例如,Red-Black Tree, AVL-Tree, AA-Tree, Splay-Tree, Treap等)相比,开销也减少了66%。

Sorted Containers将所有工作从Python分类集合中剔除-简化了Python的部署和使用。无需安装C编译器或预先构建和分发自定义扩展。性能是一项功能,测试具有100%的单元测试覆盖率和数小时的压力。

特点

  • 纯Python

  • 完善的文档

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

  • 100%的测试覆盖率

  • 压力测试时间

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

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

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

  • 实用的设计(例如SortedSet是具有SortedList索引的Python集)

  • 在Python 3.7上开发

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

快速开始

通过pip快速安装Sorted Containers:

$ pip install sortedcontainers

您也可以下载我们备份的网盘版库文件包:

download sortedcontainers

文档资料

有关sortedcontainers的完整文档,请访问 www.grantjenks.com/docs/sortedcontainers

(0)

相关推荐

  • Python |解决粉丝字典排序问题

    问题描述 解决方案该问题主要是涉及到字典排序,首先要了解字典是由键值对组成,分别由键(姓名)值(分数)组成,该问题就是以值对键值对进行排序:首先要对python中的字典中的键值对进行了解:Dict.i ...

  • 新年大礼:CNC4you网站一月份强烈推荐阅读的应用经验文档

    亲爱的客户,大家好!CNC4you网站技术中心版块一月份刚刚更新了大量技术文档和资料,特别是针对828D/840D调试和功能.优化应用相关的文档,相信一定有您感兴趣的部分.(可搜索关键词查找) 推荐阅 ...

  • 计算运行时间-装饰器实现

    装饰器的一个使用场景 之前有人问装饰器有什么用,能不能具体说个场景.当时,没想好如何使用这个问题.昨天看github上有一个纯python实现的有序数据结构库-SortedContainer.说的很牛 ...

  • CNC4you网站十月份推荐阅读的SINUMERIK应用经验文档

    亲爱的客户,大家好!CNC4you网站技术中心版块十月份刚刚更新了大量技术文档和资料,特别是针对828D/840D故障诊断与PLC功能相关的文档,相信一定有您感兴趣的部分.(可搜索关键词查找) 推荐阅 ...

  • python自动化办公——python操作Excel、Word、PDF集合大全

    本文是鉴于有些粉丝的工作需求,有时候需要遇到这些文件的处理.因此,我写了一个文章集合,供大家参考,整篇文章已经整理成册(如下图所示). 目录   章节一:python使用openpyxl操作excel ...

  • Python基础学习笔记(五)集合与字典

    本节知识大纲: 集合 字典 一.Set 集合的概念 1. set 集合的性质 set 集合是一组无序的且不能重复的集合,打印 set 集合时会自动消除重复的元素项: set 集合用大括号表示: set ...

  • Python 深入浅出支持向量机(SVM)算法

    相比于逻辑回归,在很多情况下,SVM算法能够对数据计算从而产生更好的精度.而传统的SVM只能适用于二分类操作,不过却可以通过核技巧(核函数),使得SVM可以应用于多分类的任务中. 本篇文章只是介绍SV ...

  • 免费Python机器学习课程一:线性回归算法

    学习线性回归的概念并从头开始在python中开发完整的线性回归算法 最基本的机器学习算法必须是具有单个变量的线性回归算法.如今,可用的高级机器学习算法,库和技术如此之多,以至于线性回归似乎并不重要.但 ...

  • Python:Python语言下载库或包的常见whl文件集合

    Python:Python语言下载库或包的常见whl文件集合Python语言下载库或包的常见whl文件集合地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/# ...

  • 什么是Python爬虫?Python学习难不难?

    爬虫是Python的应用领域之一,简单.入门快.就业前景好,也是Python学习者就业的首选岗位,那么什么是Python爬虫?Python爬虫学习难不难?我们一起来看看吧. 什么是Python爬虫? ...

  • 大话 Python:python 基础巩固 -- 灵活运用正则表达式完成数据提取与筛选

    原创 Sir 老王 Python 集中营 3天前 在一般的后端语言中都有正则表达式的使用,个人觉得正则表达式的难点就是有比较多的元字符比较难记,所以建议大家收藏.而在 python 的编程中,特别是爬 ...

  • 大话 Python:python 操作 excel 系列 -- 数据汇总与统计

    原创 Sir 老王 Python 集中营 1周前 在完成了前面系列的数据整理.数据清洗.数据提取与筛选之后,我们需要对进行进一步的汇总与统计使数据变成我们的可用信息. 1,数据分类汇总 # 对指定列分 ...

  • 0基础能否学会Python?Python入门

    0基础学Python难吗?这个问题是很多没有计算机基础又想要学习Python的人最关心的,接下来小编通过下面这篇文章为大家详细解答一下. 零基础学Python难吗? 说起Python语言,大家的第一印 ...