[Python标准库]bisect——维护有序列表
来源:互联网 发布:windows命令行创建文件 编辑:程序博客网 时间:2024/05/21 18:45
[Python标准库]bisect——维护有序列表
作用:维护有序列表,而不必在每次向列表增加一个元素时都调用 sort 排序。
Python版本:1.4 及以后版本。
bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序。有些情况下,这比反复对一个列表排序更高效,另外也比构建一个大列表之后再显示地对其排序更为高效。
有序插入
下面给出一个简单的例子,这里使用 insort() 按有序顺序向一个列表中插入元素。
作用:维护有序列表,而不必在每次向列表增加一个元素时都调用 sort 排序。
Python版本:1.4 及以后版本。
bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序。有些情况下,这比反复对一个列表排序更高效,另外也比构建一个大列表之后再显示地对其排序更为高效。
有序插入
下面给出一个简单的例子,这里使用 insort() 按有序顺序向一个列表中插入元素。
import bisectimport random# Use a constant seed to ensure that# the same pseudo-random numbers# are used each time the loop is run.random.seed(1)print 'New Pos Contents'print '--- --- --------'# Generate random numbers and# insert them into a list in sorted# order.l = []for i in range(1, 15): r = random.randint(1, 100) position = bisect.bisect(l, r) bisect.insort(l, r) print '%3d %3d' % (r, position), l
输出的第一列显示了新随机数,第二列显示了这个数将插入到列表的哪个位置。每一行余下的部分则是当前的有序列表。
这是一个简单的例子,对于此例所处理的数据量来说,如果直接构建列表然后完成一次排序可能速度更快。不过对于长列表而言,使用类似这样的一个插入排序算法可以大大节省时间和内存。
处理重复
之前显示的结果包含了一个重复的值 77。bisect 模块提供了两种方法来处理重复。新值可以插入到现有值得左边或右边。insort() 函数实际上是 insort_right() 的别名,这个函数会在现有值之后插入新值。相应的函数 insort_left() 则在现有值之前插入新值。
这是一个简单的例子,对于此例所处理的数据量来说,如果直接构建列表然后完成一次排序可能速度更快。不过对于长列表而言,使用类似这样的一个插入排序算法可以大大节省时间和内存。
处理重复
之前显示的结果包含了一个重复的值 77。bisect 模块提供了两种方法来处理重复。新值可以插入到现有值得左边或右边。insort() 函数实际上是 insort_right() 的别名,这个函数会在现有值之后插入新值。相应的函数 insort_left() 则在现有值之前插入新值。
import bisectimport random# Reset the seedrandom.seed(1)print 'New Pos Contents'print '--- --- --------'# Use bisect_left and insort_leftl = []for i in range(1, 15): r = random.randint(1, 100) position = bisect.bisect_left(l, r) bisect.insort_left(l, r) print '%3d %3d' % (r, position), l
使用 bisect_left() 和 insort_left() 处理同样的数据时,结果会得到相同的有序列表,不过重复值插入的位置有所不同。
处理 Python 实现外,还有一个速度更快的 C 实现。如果有 C 版本,导入 bisect 时,这个实现会自动地覆盖纯 Python 实现。
0 0
- [Python标准库]bisect——维护有序列表
- python 标准库bisect
- Python模块——bisect
- python: bisect库
- Python用于排序的模块——bisect
- 维护有序的图书列表_compateToIgnoreCase()方法
- Python学习笔记(七)—— List.sort 与二进制搜索bisect
- Python合并两个有序列表
- Python合并两个有序列表
- Python--合并两个有序列表
- python bisect module
- python bisect模块
- python 之bisect
- python---bisect模块
- Python bisect模块
- Python开发--bisect
- python之bisect模块
- python bisect模块
- JSP提示"The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path"
- test
- UI-平面构成-ai-快捷键-1
- jsp网页倒计时跳转页面
- 对象、类、组合的方法调用的内存分布图
- [Python标准库]bisect——维护有序列表
- Java工程师成神之路
- 关于ValueOperations的increment方法的解惑
- leetcode -- Max Points on a Line -- 重点
- COLING 2014 Paper Generating Supplementary Travel Guides from Social Media
- python安装一些类库的时候遇到这个问题
- Eclipse相关
- C++语言标识符的构成遵循规则
- 线段和圆/球的相交性检测