用Python标准库写出高效的代码
作者: tushushu
项目地址: https://github.com/tushushu/flying-python
1. bisect - 二分查找
给定一个列表对象,我们要对目标元素进行查找,返回其在列表中的下标。
- 首先想到的是Python列表的index方法。建立一个长度为10000的升序列表,编写search函数使用index方式把里面的每一个元素查找一遍,平均运行时间437毫秒。
- 使用bisect模块的bisect_left,也就是我们熟知的二分查找。编写fast_search函数,平均运行时间3.94毫秒,性能提升了110倍!
import bisect
def search(nums):
for x in nums:
nums.index(x)
def fast_search(nums):
for x in nums:
bisect.bisect_left(nums, x)
arr = list(range(10000))
%timeit -n 1 search(arr)
437 ms ± 12.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit -n 1 fast_search(arr)
3.94 ms ± 407 µs per loop