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 相关文章推荐
Flask框架各种常见装饰器示例
Jul 17 Python
详解Python 函数如何重载?
Apr 23 Python
Python3.5文件修改操作实例分析
May 01 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
Django视图扩展类知识点详解
Oct 25 Python
解决Python3下map函数的显示问题
Dec 04 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
Python经常使用的一些内置函数
Apr 11 Python
Python实战实现爬取天气数据并完成可视化分析详解
Jun 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中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
JavaScript仿京东轮播图效果
2021/02/25 Javascript
python 获取网页编码方式实现代码
2017/03/11 Python
Python简单读取json文件功能示例
2017/11/30 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Python自动化操作实现图例绘制
2020/07/09 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
文秘人员工作职责
2014/01/31 职场文书
工作迟到检讨书
2014/02/21 职场文书
团支部建设方案
2014/05/02 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
旷工辞退通知书
2015/04/17 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
JavaScript实现音乐播放器
2022/08/14 Javascript