如果在插入新元素的同时还想保持有序序列的顺序, 那么需要用到 bisect.insort。 bisect.bisect 的作用则是快速查找。

今天同事说到了一个python的排序模块bisect,觉得挺有趣的,跟大家分享分享。

先看看模块的结构:

前面五个属性大家感兴趣可以打出来看看数值,这里就不介绍了。

先说明的是,使用这个模块的函数前先确保操作的列表是已排序的。

先看看 insort  函数:

其插入的结果是不会影响原有的排序。

再看看 bisect  函数:

其目的在于查找该数值将会插入的位置并返回,而不会插入。

接着看 bisect_left 和 bisect_right 函数,该函数用入处理将会插入重复数值的情况,返回将会插入的位置:

其对应的插入函数是 insort_left  和 insort_right :

可见,单纯看其结果的话,两个函数的操作结果是一样的,其实插入的位置不同而已。

#####################

这个模块只有几个函数,

一旦决定使用二分搜索时,立马要想到使用这个模块

import bisect

L = [1,3,3,6,8,12,15]

x = 3

x_insert_point = bisect.bisect_left(L,x)  #在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回左侧位置1

print x_insert_point

x_insert_point = bisect.bisect_right(L,x) #在L中查找x,x存在时返回x右侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回右侧位置3

print x_insert_point

x_insort_left = bisect.insort_left(L,x) #将x插入到列表L中,x存在时插入在左侧

print L

x_insort_rigth = bisect.insort_right(L,x) #将x插入到列表L中,x存在时插入在右侧

print L

结果:

1

3

[1, 3, 3, 3, 6, 8, 12, 15]

[1, 3, 3, 3, 3, 6, 8, 12, 15]

#####################

示例

importbisect

HAYSTACK= [1, 4, 5, 6, 8, 12, 15, 20, 21, 23, 23, 26, 29, 30]

NEEDLES= [0, 1, 2, 5, 8, 10, 22, 23, 29, 30, 31]

ROW_FMT= '{0:2d} @ {1:2d}'

print(len(HAYSTACK))defdemo(bisect_fn):for needle inreversed(NEEDLES):

position=bisect_fn(HAYSTACK, needle)print(ROW_FMT.format(needle, position))#bisect_fn = bisect.bisect

bisect_fn =bisect.bisect_leftprint('DEMO:', bisect_fn.__name__)print('haystack ->', ' '.join('%2d' % n for n inHAYSTACK))

demo(bisect_fn)

###################

14

DEMO: bisect_left

haystack -> 1 4 5 6 8 12 15 20 21 23 23 26 29 30

31 @ 14

30 @ 13

29 @ 12

23 @ 9

22 @ 9

10 @ 5

8 @ 4

5 @ 2

2 @ 1

1 @ 0

0 @ 0

python bisect_python bisect模块相关推荐

  1. python bisect_python bisect

    Python的bisect模块,用于维护有序列表.bisect模块实现了将元素插入一个有序序列的算法,它利用二分算法实现排序,相比于每次调用sort而言,这样无疑要高效许多.bisect_*系列方法用 ...

  2. python bisect_说说 Python 的 bisect 模块

    bisect 模块包含两个主要函数( bisect 和 insort),它们内部利用二分查找算法,分别用于在有序序列中查找元素与插入元素. bisect /baɪˈsekt/ to divide st ...

  3. python bisect_python中bisect模块用法实例

    本文实例讲述了python中bisect模块用法,分享给大家供大家参考. 具体方法分析如下: 这个模块只有几个函数,一旦决定使用二分搜索时,立马要想到使用这个模块. 示例代码如下: import bi ...

  4. Python bisect模块

    Python的bisect模块是内置模块,bisect模块实现了一个算法用于有序序列的插入和查找.. 在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高.Bisect是二分法的意思,这里 ...

  5. python bisect_Python中bisect的使用

    在中第十章的练习中,涉及到了分半查找的bisect模块.为此,在网上查阅了Python中bisect模块的相关内容.有几个链接相对权威和明白: 这里,就我有疑问的地方做个记录: 第一,bisect模块 ...

  6. python bisect_Python的bisect模块

    Python的列表(list)类型内部是一个线性表,在线性表中查找元素复杂度为O(N),即调用list.index()的复杂的是O(N).当数据量较大时,应该使用二分查找优化,二分查找范围每次缩小一般 ...

  7. python bisect_Python实现二分查找与bisect模块详解

    前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表.在列表中查找元素可以使用 list.index()方法,其时间复杂度为O(n) .对于大数据量,则可以用二分查找进行优化 ...

  8. python中的bisect模块与二分查找

    1.bisect模块概述 bisect是python的内置模块, 用于有序序列的插入和查找. 插入的数据不会影响列表的排序, 但是原有列表需要是有序的, 并且不能是倒序. Bisect模块提供的函数有 ...

  9. Python bisect模块详解

    背个书: bisect模块支持按排序顺序维护列表,而不必在每次插入后对列表进行排序.对于具有昂贵比较操作的长项目列表,这可能是对更常见方法的改进.之所以调用该模块,是bisect因为它使用基本的二分算 ...

最新文章

  1. iRobot的30年成长史
  2. ASP.NET MVC 实现二级域名
  3. 权限控制框架Shiro简单介绍及配置实例
  4. 热烈庆祝AC70道题
  5. Python爬去知乎上问题下所有图片
  6. Git自由之章 - 本地仓库的基本操作
  7. android霓虹灯源代码——基础编
  8. Modbus协议简单总结
  9. scl语言用plc脉冲做定时器_请问SCL语言如何调用定时器
  10. STM32F103C8T6 USART2 配置
  11. html图片缩小属性,CSS属性实现同比例缩小图片
  12. matlab中filtfilt函数解析
  13. 阶乘因式分解(一)/java
  14. 菜鸟教程Python教程100例(三)(持续更新)
  15. 灰帽子python 读书笔记 1
  16. paip.花生壳 服务启动失败 以及不能安装服务,权限失败的解决
  17. PAT乙级(简单模拟)1001、1011、1016、1026、1046、1012、1018
  18. csdn使用Markdown
  19. PLC PID控制优化系列之微分先行
  20. 适合小黑子的资料【IKUN】

热门文章

  1. 网络安全之黄金票据,白银票据
  2. C++事件的建立和使用SetEvent,ResetEvent
  3. windows核心编程——第三章 内核对象
  4. winform自定义控件(gdi+)——测量文本大小(MeasureString)
  5. [H5]CSS3样式(背景、文本、字体、链接、列表、表格和轮廓)
  6. LittlevGL 6.0 移植到STM32F429平台
  7. 第1120期AI100_机器学习日报(2017-10-12)
  8. Auto Code Generator
  9. 聚类的外部指标(Purity, ARI, NMI, ACC) 和内部指标(NCC,Entropy,Compactness,Silhouette Index),附代码 (Python 和 Matlab)
  10. 医院全成本分析---数据来源网络,有部分自己的理解