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 with的用法
Aug 22 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
python timestamp和datetime之间转换详解
Dec 11 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
Python调用.NET库的方法步骤
Dec 27 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
详解python中的闭包
Sep 07 Python
教你用python控制安卓手机
May 13 Python
讲解Python实例练习逆序输出字符串
May 06 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
python实现socket端口重定向示例
2014/02/10 Python
详细解读Python中的__init__()方法
2015/05/02 Python
python文本数据相似度的度量
2018/03/12 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
快递业务员岗位职责
2014/01/06 职场文书
年终晚会主持词
2014/03/25 职场文书
公证委托书大全
2014/04/04 职场文书
银行委托书范本
2014/04/04 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
如何做好员工培训计划?
2019/07/09 职场文书