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 dict remove数组删除(del,pop)
Mar 24 Python
Python模块WSGI使用详解
Feb 02 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
Python实现常见的回文字符串算法
Nov 14 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php MySQL与分页效率
2008/06/04 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
基于php缓存的详解
2013/05/15 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
基于jquery封装的一个js分页
2011/11/15 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
Internet主要有哪些网络群组成
2015/12/24 面试题
财务部绩效考核方案
2014/05/04 职场文书
学习之星事迹材料
2014/05/17 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers