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()的性能也逐步下降,所以 ...
随机推荐
- MATLAB技巧—sort和sortrows函数
MATLAB技巧-sort和sortrows函数 1.sort函数 sort函数用于对数据进行排序,通过help sort命令,可以查找到sort函数的具体用法: Y = SORT(X,DIM,MOD ...
- JS控制视频的播放
在用js定时器控制视频时, html部分: <video id="video_1"> <source id="source_1" src=&q ...
- Composer安装Yii2以及相关扩展
1.安装redis扩展 命令:composer require yiisoft/yii2-redis Git地址:https://github.com/yiisoft/yii2-redis/blob/ ...
- 一句代码上传MultipartFile图片到指定文件夹
代码如下: public class TestFile { void upload(MultipartFile file) throws IOException { file.transferTo(n ...
- 网络编程-基础篇03(I/O模型)
好文传播,在此插个眼: 一文读懂高性能网络编程中的I/O模型
- 两天了。照着SVN的界面画的一个界面。
可以选择显示哪些列. 界面上的东西,都简单,麻烦的是它的下层.下层全部用svn server的服务器自带的svn.exe来支持. 有些位置要启动svn.exe不止一次.所以参数的来回传递,来回组合 ...
- struts2-result-servletAPI-获得参数-参数封装
1 结果跳转方式 转发 重定向 转发到Action 重定向到Action 2 访问servletAPI方式 2.1 原理 2.2 获得API 通过ActionContext ★★★★ 通过Servl ...
- 2019-8-31-dotnet-获取用户设备安装了哪些-.NET-Framework-框架
title author date CreateTime categories dotnet 获取用户设备安装了哪些 .NET Framework 框架 lindexi 2019-08-31 16:5 ...
- PHP苹果推送实现(APNS)
以下资料网上收集整理得来 1.在ios dev center制作相关证书和文件用客户端实现(不再赘述,网上很多,) 网上教程: http://blog.csdn.net/lizhenning87/ar ...
- MySQL系列(一)--基础知识(转载)
安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...