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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
python编写暴力破解FTP密码小工具
Nov 19 Python
Python计算程序运行时间的方法
Dec 13 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
Python基础类继承重写实现原理解析
Apr 03 Python
Python打印特殊符号及对应编码解析
May 07 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
我的论坛源代码(九)
2006/10/09 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
js实现录音上传功能
2019/11/22 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
学习python的几条建议分享
2013/02/10 Python
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
python删除列表中重复记录的方法
2015/04/28 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
微信小程序python用户认证的实现
2019/07/29 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
采购部部门职责
2013/12/15 职场文书
英语教育专业自荐信
2014/05/29 职场文书
班级文化标语
2014/06/23 职场文书
会计学习心得体会
2014/09/09 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
公司停电通知
2015/04/15 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android