以前使用bisect这个模块的时候,大多是用于维护一个有序队列。没想到过用它实现二分法。
今天做题的时候需要做二分法,写的有点繁琐,不管是递归还是循环。我就想,python那么多模块,难道就没有现成的?
然后突然感觉bisect这个模块难道不就是可以来用吗?想了几分钟,感觉肯定是可以的,可是就是没想明白怎么弄(可能是最近两个礼拜home office在家里呆傻了)。干脆搜了一下,果然。
http://kuanghy.github.io/2016/06/14/python-bisect
代码非常简单。
def binary_search_bisect(lst, x):
i = bisect_left(lst, x)
if i != len(lst) and lst[i] == x:
return i
return None
这个可爱的朋友已经帮我们弄好了,他甚至帮我们测试了循环递归和bisect的比较。甚至有numpy.searchsorted的比较。
基本上除非你使用的是numpy的ndarray,使用bisect的版本是最简单+最快捷的。