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正则分组的应用
Nov 10 Python
python之wxPython应用实例
Sep 28 Python
简单理解Python中基于生成器的状态机
Apr 13 Python
浅谈Python中数据解析
May 05 Python
在Django的上下文中设置变量的方法
Jul 20 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
Python 文件处理注意事项总结
Apr 10 Python
Python入门_浅谈for循环、while循环
May 16 Python
python list元素为tuple时的排序方法
Apr 18 Python
python调用私有属性的方法总结
Jul 24 Python
python实现简易自习室座位预约系统
Jun 30 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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实现天干地支计算器示例
2014/03/14 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
JS获取父节点方法
2009/08/20 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
vue登录注册实例详解
2019/09/14 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
英国著名书店:Foyles
2018/12/01 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
大学生职业生涯规划书范文
2014/01/14 职场文书
村官学习十八大感想
2014/01/15 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
英文推荐信格式范文
2014/05/09 职场文书
先进人物事迹材料
2014/12/29 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers