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 深入理解yield
Sep 06 Python
零基础写python爬虫之打包生成exe文件
Nov 06 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
初步剖析C语言编程中的结构体
Jan 16 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
Python importlib模块重载使用方法详解
Oct 13 Python
Python 制作自动化翻译工具
Apr 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中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
python中对list去重的多种方法
2014/09/18 Python
Python中的闭包详细介绍和实例
2014/11/21 Python
python中的字典操作及字典函数
2018/01/03 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Python帮你识破双11的套路
2019/11/11 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
程序集与命名空间有什么不同
2014/07/25 面试题
毕业生物理教师求职信
2013/10/17 职场文书
工作时间上网检讨书
2014/02/03 职场文书
会员活动策划方案
2014/08/19 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
公司前台接待岗位职责
2015/04/03 职场文书