Python中bisect的用法

 更新时间:2014年09月23日 15:55:07   投稿:shichen2014  
这篇文章主要介绍了Python中bisect的用法,主要讲述了针对数组的插入及排序操作,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了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 matplotlib 绘图 和 dpi对应关系详解

    python matplotlib 绘图 和 dpi对应关系详解

    这篇文章主要介绍了python matplotlib 绘图 和 dpi对应关系详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python程序设计入门(1)基本语法简介

    Python程序设计入门(1)基本语法简介

    Python是当今日趋流行的一种脚本语言,它比Java更简单,比php更强大,并且还适用于做桌面应用的开发,这篇文章主要介绍了Python基本语法,需要的朋友可以参考下
    2014-06-06
  • Python decimal模块使用方法详解

    Python decimal模块使用方法详解

    这篇文章主要介绍了Python decimal模块使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 基于Python实现迪杰斯特拉和弗洛伊德算法

    基于Python实现迪杰斯特拉和弗洛伊德算法

    这篇文章主要为大家详细介绍了基于Python实现迪杰斯特拉和弗洛伊德算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • OpenCV NAO机器人辅助捡球丢球流程分析

    OpenCV NAO机器人辅助捡球丢球流程分析

    这篇文章主要介绍了OpenCV NAO机器人辅助捡球丢球,本项目使用NAO机器人识别球并捡起,然后将其扔到指定位置,主要涉及图像的获取、滤波、目标物体定位和NAO机器人的运动控制,需要的朋友可以参考下
    2022-05-05
  • pandas 根据列的值选取所有行的示例

    pandas 根据列的值选取所有行的示例

    今天小编就为大家分享一篇pandas 根据列的值选取所有行的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python网络编程之ZeroMQ知识总结

    Python网络编程之ZeroMQ知识总结

    这篇文章主要介绍了Python网络编程之ZeroMQ知识总结,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Transpose 数组行列转置的限制方式

    Transpose 数组行列转置的限制方式

    今天小编就为大家分享一篇Transpose 数组行列转置的限制方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python中魔术方法的定义及一些常用方法

    Python中魔术方法的定义及一些常用方法

    所有以双下划线__包起来的方法,统称为Magic Method(魔术方法),它是一种的特殊方法,这篇文章主要给大家介绍了关于Python中魔术方法的定义及一些常用方法,需要的朋友可以参考下
    2024-02-02
  • python 定义n个变量方法 (变量声明自动化)

    python 定义n个变量方法 (变量声明自动化)

    今天小编就为大家分享一篇python 定义n个变量方法 (变量声明自动化),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11

最新评论