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 转义字符详细介绍
Mar 21 Python
Python3 伪装浏览器的方法示例
Nov 23 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
python实现俄罗斯方块
Jun 26 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
python 生成器和迭代器的原理解析
Oct 12 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
Python之Sklearn使用入门教程
Feb 19 Python
django上传文件的三种方式
Apr 29 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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
example2.php
2006/10/09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php继承的一个应用
2011/09/06 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
js 分页全选或反选标识实现代码
2011/08/09 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
webstorm添加*.vue文件支持
2018/05/08 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
python列表操作实例
2015/01/14 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
python的文件操作方法汇总
2017/11/10 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Python with语句用法原理详解
2020/07/03 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
路政管理专业推荐信
2013/11/11 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
阿凡达观后感
2015/06/10 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
实现GO语言对数组切片去重
2022/04/20 Golang
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技