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的一些用法分享
Oct 07 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
python遍历序列enumerate函数浅析
Oct 17 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
python在文本开头插入一行的实例
May 02 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
Python底层封装实现方法详解
Jan 22 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
Python爬取科目四考试题库的方法实现
Mar 30 Python
Python中的 No Module named ***问题及解决
Jul 23 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
python3.6编写的单元测试示例
2019/08/17 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Python实现粒子群算法的示例
2021/02/14 Python
网络工程专业毕业生推荐信
2013/10/28 职场文书
大学生活自我评价
2014/04/09 职场文书
《画》教学反思
2014/04/14 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
学校清明节活动总结
2014/07/04 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
酒店厨房管理制度
2015/08/06 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
Go语言 详解net的tcp服务
2022/04/14 Golang
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang