在Python中可以利用bisect模块来实现二分搜索,该模块包含函数只有几个:

  1. import bisect
  2.  
  3. L = [1,3,4,5,5,5,8,10]
  4. x = 5
  5.  
  6. bisect.bisect_left(L,x) #
  7. # 在L中查找x,x存在时返回x最左侧的位置,x不存在返回应该插入的位置
  8.  
  9. bisect.bisect_right(L,x) #
  10. # 在L中查找x,x存在时返回x最右侧的位置,x不存在返回应该插入的位置
  11.  
  12. bisect.insort_left(L,x) # [1, 3, 4, 5, 5, 5, 5, 8, 10]
  13. # 将x插入到列表L中,x存在时插入在左侧
  14.  
  15. bisect.insort_right(L,x) # [1, 3, 4, 5, 5, 5, 5, 5, 8, 10]
  16. # 将x插入到列表L中,x存在时插入在右侧

  bisect.insort_leftbisect.insort_right貌似没什么差别,作用基本一致。

  另外,bisect.bisect(L,x)与bisect_right相同,insort与insort_right相同。

  例子:

  1. import bisect
  2. import random
  3.  
  4. mylist = list()
  5. for i in range(10):
  6. num = random.randint(1,100)
  7. index = bisect.bisect_left(mylist, num)
  8. bisect.insort_left(mylist, num)
  9. print('num ', str(num), 'index ', str(index), 'list ', mylist)
  10.  
  11. mylist = list()
  12. for i in range(10):
  13. num = random.randint(1,100)
  14. index = bisect.bisect_right(mylist, num)
  15. bisect.insort_right(mylist, num)
  16. print('num ', str(num), '\tindex ', str(index), '\tlist ' ,mylist)

  输出:

  1. num 72 index 0 list [72]
  2. num 89 index 1 list [72, 89]
  3. num 41 index 0 list [41, 72, 89]
  4. num 45 index 1 list [41, 45, 72, 89]
  5. num 100 index 4 list [41, 45, 72, 89, 100]
  6. num 1 index 0 list [1, 41, 45, 72, 89, 100]
  7. num 69 index 3 list [1, 41, 45, 69, 72, 89, 100]
  8. num 4 index 1 list [1, 4, 41, 45, 69, 72, 89, 100]
  9. num 76 index 6 list [1, 4, 41, 45, 69, 72, 76, 89, 100]
  10. num 11 index 2 list [1, 4, 11, 41, 45, 69, 72, 76, 89, 100]
  11.  
  12. num 82 index 0 list [82]
  13. num 39 index 0 list [39, 82]
  14. num 27 index 0 list [27, 39, 82]
  15. num 78 index 2 list [27, 39, 78, 82]
  16. num 9 index 0 list [9, 27, 39, 78, 82]
  17. num 80 index 4 list [9, 27, 39, 78, 80, 82]
  18. num 58 index 3 list [9, 27, 39, 58, 78, 80, 82]
  19. num 42 index 3 list [9, 27, 39, 42, 58, 78, 80, 82]
  20. num 59 index 5 list [9, 27, 39, 42, 58, 59, 78, 80, 82]
  21. num 50 index 4 list [9, 27, 39, 42, 50, 58, 59, 78, 80, 82]

END 2018-11-01 23:25:37

Python学习笔记:bisect模块实现二分搜索的更多相关文章

  1. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  2. Python学习笔记—itertools模块

    这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...

  3. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  4. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  5. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  6. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  7. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

  8. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  9. Python学习笔记14—模块

    在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...

  10. python学习笔记:模块——自定义模块的3种导入方式

    一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...

随机推荐

  1. Java上传文件夹(Jersey)

    背景介绍:公司要在CMS系统上为运营人员提供一个功能供运营人员将做好的活动页面上传到阿里云存储上,上传的内容为一个文件夹,文件夹内部有.html网页,JS文件夹下有JS文件,CSS文件夹下有样式表,I ...

  2. 已经菜到不行了 PAT 1010. Radix (25)

    https://www.patest.cn/contests/pat-a-practise/1010 题目大意: 输入四个数字,a,b,c,d. a和b是两个数字,c=1表示是第一个数字,c=2表示是 ...

  3. OpenResty 扩展库之(一)——lua-resty-shell 库

    介绍 当您需要执行子进程(或shell命令)时,这是一个打算与OpenResty应用程序一起使用的小型库. 它类似于os.execute和io.popen,除了它是完全非阻塞的,因此即使对于需要很长时 ...

  4. [洛谷P2444] [POI2000]病毒

    洛谷题目链接:[POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会 ...

  5. redis内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...

  6. Redis学习九:Redis的发布订阅

    发布订阅功能,redis也具备,但是要知道的是redis主要功能还是分布式的缓存功能,因此这种订阅发布功能很少用,有专门的kafka  activemq 等消息中间件来完成,因此本文只是简单介绍,了解 ...

  7. soj1010. Zipper

    1010. Zipper Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Given three strings, yo ...

  8. cmmusic:小巧而实用的mplayer音乐播放前端

    Author: Jiqing (jiqingwu@gmail.com) home: http://hi.baidu.com/jiqing0925 create: 2011-03-10 update: ...

  9. 20155303 2016-2017-2 《Java程序设计》第七周学习总结

    20155303 2016-2017-2 <Java程序设计>第七周学习总结 教材学习中的问题和解决过程 『问题一』:SimpleDateFormat中每个字符的含义都是什么? 『问题一解 ...

  10. 用代码从文件中导入数据到SQL Server

    引言 导入数据到SQL Server 是常见的需求,特别是定期导入这种需求. 对于定期导入主要有以下几种方式可选择: Bulk Insert Bcp Utility OpenRowSet 写程序导入( ...