如果我有一个已经排序的列表并使用 in 关键字,例如:
a = [1,2,5,6,8,9,10]
print 8 in a
我认为这应该进行顺序搜索,但我可以通过进行二分搜索来加快速度吗? 是否有一种 Python 式的方式来在排序列表中进行搜索?
请您参考如下方法:
标准库有 bisect 支持按排序序列搜索的模块。
但是,对于小型列表,我敢打赌 in 背后的 C 实现运营商会击败bisect .你必须用一堆常见的案例来衡量,以确定你的目标硬件上真正的盈亏平衡点......
值得注意的是,如果您可以摆脱无序的迭代(即 set ),那么您可以在 O(1) 中进行查找。平均时间(使用 in 运算符),与 O(logN) 序列的二分法相比和 in序列上的运算符 O(N) .而且,有了集合,您还可以避免首先对它进行排序的成本 :-)。
