Python的bisect模块
Python的列表(list)类型内部是一个线性表,在线性表中查找元素复杂度为O(N),即调用list.index()的复杂的是O(N)。当数据量较大时,应该使用二分查找优化,二分查找范围每次缩小一般,复杂度为log(N),数据量越大速度差距越明显。
bisect模块就是基于二分实现的,二分查找要求列表是有序的,bisect实现了在一个有序列表中插入元素并保持列表为有序状态、或返回插入位置但并不进行实际的插入。
bisect一共有6个函数:['bisect', 'bisect_left', 'bisect_right', 'insort', 'insort_left', 'insort_right'],使用这些函数前要确保操作的列表是有序的。
insort
排序很耗时,因此在得到一个有序序列之后,我们最好能够保持它的有序。insort(seq, item)把变量item插入到序列seq中,并能保持seq的升序顺序
>>> data = [4, 2, 9, 7]
>>> data.sort()
>>> insort(data, 3)
>>> data
[2, 3, 4, 7, 9]
bisect
其目的在于查找该数值将会插入的位置并返回,而不会插入。
>>> bisect(data, 1)
0
>>> data
[2, 3, 4, 7, 9]
bisect_left 和 bisect_right
bisect_left 和 bisect_right 函数,用入处理将会插入重复数值的情况,返回将会插入的位置。
bisect_left(seq, x) x存在时返回x左侧的位置;
bisect_right(seq, x) x存在时返回x右侧的位置;
>>> bisect_left(data, 4)
2
>>> bisect_right(data, 4)
3
>>> data
[2, 3, 4, 7, 9]
insort_left 和 insort_right
insort_left 和 insort_right 会进行实际的插入。
insort_left(seq, x) x存在时插入在左侧插入;
insort_right(seq, x) x存在时在右侧插入;
>>> data
[2, 3, 4, 7, 9]
>>> insort_left(data, 4)
>>> data
[2, 3, 4, 4, 7, 9]
>>> data = [2, 3, 4, 7, 9]
>>> insort_right(data, 4)
>>> data
[2, 3, 4, 4, 7, 9]
Python的bisect模块的更多相关文章
- python中bisect模块的使用
一般用于二分查找, 当然列表应该是有序表 参考于: http://blog.csdn.net/xiaocaiju/article/details/6975714
- Python中bisect的使用
在<Think Python>中第十章的练习中,涉及到了分半查找的bisect模块.为此,在网上查阅了Python中bisect模块的相关内容.有几个链接相对权威和明白: 1> ht ...
- python笔记之bisect模块
python笔记之bisect模块 当你决定使用二分搜索时,这个模块会给你带来很大的帮助. 例子 import bisect L = [1,3,3,6,8,12,15] x = 3 #在L中查找x,x ...
- python bisect 排序模块 二分查找与 bisect 模块
python 3.6.5 import bisect bisect_list=dir(bisect)print(bisect_list)bisect_list = ['__builtins__', ' ...
- Python学习笔记:bisect模块实现二分搜索
在Python中可以利用bisect模块来实现二分搜索,该模块包含函数只有几个: import bisect L = [1,3,4,5,5,5,8,10] x = 5 bisect.bisect_le ...
- python的算法:二分法查找(2)--bisect模块
Python 有一个 bisect 模块,用于维护有序列表.bisect 模块实现了一个算法用于插入元素到有序列表.在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高.Bisect 是二 ...
- [Python之路] bisect模块
bisect模块 bisect是Python提供的二分查找模块 源码如下: """Bisection algorithms.""" def ...
- python二分查找模块bisect
bisect模块用于二分查找,非常方便. Bisect模块提供的函数有: 1.查找 bisect.bisect_left(a,x, lo=0, hi=len(a)) : 查找在有序列表a中插入x的in ...
- Python中bisect的使用方法
Python中列表(list)的实现其实是一个数组,当要查找某一个元素的时候时间复杂度是O(n),使用list.index()方法,但是随着数据量的上升,list.index()的性能也逐步下降,所以 ...
随机推荐
- 基于 Kubernetes 实践弹性的 CI/CD 系统
大家好,我是来自阿里云容器服务团队的华相.首先简单解释一下何为 Kubernetes 来帮助大家理解.Kuberentes 是一个生产可用的容器编排系统.Kuberentes 一方面在集群中把所有 N ...
- 深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]
在这个小结里面重点讨论原子操作的原理和设计思想. 由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念. 在Java Concurrency in Practice中是这样定义线程安全的: ...
- 2019牛客暑期多校赛(第一场) A Equivalent Prefixes(单调栈)
传送门:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个数组a和b,求最大的p,满足在区间 [1,p] 中任何区间的两个数组的最小值的下标都相等. 思 ...
- 【DM8168学习笔记1】帮您快速入门 TI 的 Codec Engine
http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=61575 德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 ...
- Python爬虫笔记【一】模拟用户访问之webdriver用户登入——第三次(8)
经过post方法之后,因为有动态的value值所以再此回到用webdriver的解决上,但是在下载图片上会打开新打开一个链接,导致与网页图片不同即验证码同步问题,没办法只能想了一个笨法子,网页截图,唉 ...
- spring MVC4 配置详解(个人记录)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 二、Web Service开发(.net)
.net平台内建了对Web Service的支持,包括Web Service的构建和使用.与其它开发平台不同,使用.net平台,你不需要其他的工具或者SDK就可以完成Web Service的开发了.. ...
- 【JOB】Oracle中JOB的创建方法以及一个细节的探究
在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能.简单演示一下,供参考. 1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试. ...
- Theano入门——CIFAR-10和CIFAR-100数据集
Theano入门——CIFAR-10和CIFAR-100数据集 1.CIFAR-10数据集介绍 CIFAR-10数据集包含60000个32*32的彩色图像,共有10类.有50000个训练图像和1000 ...
- windows console 控制台自启动
var fileName = Assembly.GetExecutingAssembly().Location; System.Diagnostics.Process.Start(fileName);