list.index(elem)
据我所知,Python 的列表有一个函数,运行时间为 O(n)。但是,如果我可以保证列表已排序,这仍然是获取元素索引的最佳方法吗?
二分搜索会更快地返回索引吗?此外,有没有办法强制 Python 标准库对列表中元素的索引进行二分搜索?
答案1
是的,二分查找通常更快。不,标准库index
函数没有这个选项。
另一个答案有二分查找的代码:
from bisect import bisect_left
def binary_search(a, x, lo=0, hi=None): # can't use a to specify default for hi
hi = hi if hi is not None else len(a) # hi defaults to len(a)
pos = bisect_left(a,x,lo,hi) # find insertion position
return (pos if pos != hi and a[pos] == x else -1) # don't walk off the end