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 相关文章推荐
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
深入理解Django的中间件middleware
Mar 14 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
用Python shell简化开发
Aug 08 Python
python散点图实例之随机漫步
Aug 27 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
python3.4爬虫demo
Jan 22 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
python实现3D地图可视化
Mar 25 Python
Python无损压缩图片的示例代码
Aug 06 Python
通俗讲解python 装饰器
Sep 07 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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制作静态网站的模板框架(一)
2006/10/09 PHP
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
MSN消息提示类
2006/09/05 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
python练习程序批量修改文件名
2014/01/16 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
文秘自荐信
2014/06/28 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
优质护理心得体会
2016/01/22 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
MYSQL如何查看操作日志详解
2022/05/30 MySQL