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 相关文章推荐
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
详解python 爬取12306验证码
May 10 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 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提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
显示、隐藏密码
2006/07/01 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
js实现每日签到功能
2018/11/29 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
如何在python中实现线性回归
2020/08/10 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
linux面试题参考答案(11)
2012/05/01 面试题
感恩小明星事迹材料
2014/05/23 职场文书
党课心得体会范文
2014/09/09 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电