Python中bisect的用法


Posted in Python onSeptember 23, 2014

本文实例讲述了Python中bisect的用法,是一个比较常见的实用技巧。分享给大家供大家参考。具体分析如下:

一般来说,Python中的bisect用于操作排序的数组,比如你可以在向一个数组插入数据的同时进行排序。下面的代码演示了如何进行操作:

import bisect
import random
random.seed(1)
print('New pos contents')
print('-----------------')
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

输出结果为:

New pos contents
-----------------
 14  0 [14]
 85  1 [14, 85]
 77  1 [14, 77, 85]
 26  1 [14, 26, 77, 85]
 50  2 [14, 26, 50, 77, 85]
 45  2 [14, 26, 45, 50, 77, 85]
 66  4 [14, 26, 45, 50, 66, 77, 85]
 79  6 [14, 26, 45, 50, 66, 77, 79, 85]
 10  0 [10, 14, 26, 45, 50, 66, 77, 79, 85]
 3  0 [3, 10, 14, 26, 45, 50, 66, 77, 79, 85]
 84  9 [3, 10, 14, 26, 45, 50, 66, 77, 79, 84, 85]
 44  4 [3, 10, 14, 26, 44, 45, 50, 66, 77, 79, 84, 85]
 77  9 [3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]
 1  0 [1, 3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]

可以看到,在插入这些随机数的时候数组同时进行了排序。不过其中有一些重复的元素,比如上面的77,77。你可以对这些重复元素的顺序进行设置,如果希望重复的元素出现在与他相同的元素左边就是用bisect_left,否则就是用bisect_right,相应的使用insort_left和insort_right。比如下面的代码,我们可以看到出现重复的元素索引变化:

import bisect
import random
random.seed(1)
print('New pos contents')
print('-----------------')
l=[]
 
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

输出结果为:

New pos contents
-----------------
 14  0 [14]
 85  1 [14, 85]
 77  1 [14, 77, 85]
 26  1 [14, 26, 77, 85]
 50  2 [14, 26, 50, 77, 85]
 45  2 [14, 26, 45, 50, 77, 85]
 66  4 [14, 26, 45, 50, 66, 77, 85]
 79  6 [14, 26, 45, 50, 66, 77, 79, 85]
 10  0 [10, 14, 26, 45, 50, 66, 77, 79, 85]
 3  0 [3, 10, 14, 26, 45, 50, 66, 77, 79, 85]
 84  9 [3, 10, 14, 26, 45, 50, 66, 77, 79, 84, 85]
 44  4 [3, 10, 14, 26, 44, 45, 50, 66, 77, 79, 84, 85]
 77  8 [3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]
 1  0 [1, 3, 10, 14, 26, 44, 45, 50, 66, 77, 77, 79, 84, 85]

此函数bisect.bisect(list,key) ,犹如java里的TreeMap的tailMap(fromkey)。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
python使用正则表达式提取网页URL的方法
May 26 Python
Python 装饰器深入理解
Mar 16 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
python四种出行路线规划的实现
Jun 23 Python
Python实现聚类K-means算法详解
Jul 15 Python
python元组操作实例解析
Sep 23 #Python
Python中实现两个字典(dict)合并的方法
Sep 23 #Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 #Python
Python中的类学习笔记
Sep 23 #Python
Python函数嵌套实例
Sep 23 #Python
Python中的自定义函数学习笔记
Sep 23 #Python
Python中的exec、eval使用实例
Sep 23 #Python
You might like
php代码把全角数字转为半角数字
2007/12/10 PHP
PHP学习笔记之一
2011/01/17 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
原生js开发的日历插件
2017/02/04 Javascript
JS实现复制功能
2017/03/01 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
小学语文教研活动总结
2014/07/01 职场文书
调研座谈会发言材料
2014/08/23 职场文书
二手房购房协议书范本
2014/10/05 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
Node.js实现断点续传
2021/06/23 Javascript