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 网络编程起步(Socket发送消息)
Sep 06 Python
python实现dnspod自动更新dns解析的方法
Feb 14 Python
详解Python的Django框架中的templates设置
May 11 Python
Python中subprocess模块用法实例详解
May 20 Python
Python缩进和冒号详解
Jun 01 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
实践Vim配置python开发环境
Jul 02 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
Python requests模块cookie实例解析
Apr 14 Python
Python os库常用操作代码汇总
Nov 03 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
apache php模块整合操作指南
2012/11/16 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php生成扇形比例图实例
2013/11/06 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Python实现的文本编辑器功能示例
2017/06/30 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
简单实现python收发邮件功能
2018/01/05 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
如何利用Python 进行边缘检测
2020/10/14 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
架构师岗位职责
2013/11/18 职场文书
中学生运动会入场词
2014/02/12 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL