在<Think Python>中第十章的练习中,涉及到了分半查找的bisect模块。为此,在网上查阅了Python中bisect模块的相关内容。有几个链接相对权威和明白:

1>  http://docs.python.org/2/library/bisect.html

2>  http://www.cnblogs.com/skydesign/archive/2011/09/02/2163592.html

这里,就我有疑问的地方做个记录:
第一,bisect模块中的函数都有哪些用途。根据Python网站的参考手册,这个模块的主要用途是运用Bisection Algorithm(分半算法)在已序的列表中进行查找和插入操作。练习中使用了bisect_left(a,x)函数,这个函数给出了x元素在列表a的位置(如果x在列表中已经存在,这时给出最左元素)。当然,对应的还有bisect_right()函数。模块中也提供了插入操作insort_left(a,x)和insort_right(a,x)。其中,insort_left(a,x)的操作等同于a.insert(bisect.bisect_left(a,x),x)。

第二,对于Allen给出的练习代码中,if判断句如何理解。经过思考,发现经过分半查找之后,下表i可能会等于len(word_list),比如元素x大于列表中的所有元素的情况。鉴于此,就需要用条件控制一下。这样,代码中的两个条件就能正确描述查找成功的情况(注意,查找失败的情况下,下表i也将停在0~len(list)的某个值上)。

i = bisect_left(word_list, word)
if i != len(word_list) and word_list[i] == word:
return True
else:
return False
												

最新文章

  1. golang调用c++文件
  2. jQuery.attr() 函数详解
  3. 如何利用tomcat搭建一个动态服务器
  4. bzoj1297: [SCOI2009]迷路
  5. selenium python 环境搭建
  6. 关于在VMware上装lFEDORA系统
  7. JavaScript MVC 框架[转载]
  8. windows下安装apache笔记
  9. ASIHTTPRequest中的DELETE、PUT、GET、POST请求实例-备用
  10. 用于辅助在 bootstrap-dialog 中的表现:app-jquery-dialog.js
  11. 【原】无脑操作:Windows 10 + MySQL 5.5 安装使用及免安装使用
  12. jQuery对于动态生成的元素绑定无效的问题~~
  13. 【2】学习C++之引用
  14. python使用urllib2 http 下载参数的try catch
  15. Gitlab安装、汉化及使用
  16. 分布式系统监视zabbix讲解四之可视化--技术流ken
  17. ubuntu14.04 VIM for python 一键配置
  18. 报错:[__NSArrayI objectAtIndex:]: index 5 beyond bounds [0 .. 4]&#39;
  19. OCP 062大量考试新题(2019年)-12
  20. 【转】Java工程师成神之路

热门文章

  1. Django URLs error: view must be a callable or a list/tuple in the case of include()
  2. bootstrap3文章
  3. StringBuffer 去掉最后一个字符
  4. iOS 使用代码创建约束,实现自动布局
  5. iOS4.0及以上系统,关闭程序,applicationWillTerminate为调用问题解决
  6. Git项目下载部分文件或文件夹
  7. 【BZOJ3551】 [ONTAK2010]Peaks加强版
  8. 【问题解决方案】Keras手写数字识别-ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
  9. [转]高端又易学的vbs表白程序了解一下
  10. 转---30 分钟学会 Flex 布局