输入是元素和外部项的排序列表。例如:
list_ = [0, 3.5, 5.8, 6.2, 88]
item = 4.4
找出list_
item
中哪两个元素介于两者之间的最快方法是什么?例如,在这种情况下,两个数字将是3.5和5.8。有什么想法吗?
答案 0 :(得分:9)
由于输入已排序,因此您在算法上最好的选择是使用bisect
模块 - 例如bisect_left
>>> list_ = [0, 3.5, 5.8, 6.2, 88]
>>> item = 4.4
>>> bisect.bisect_left(list_, item)
2
您想要的项目位于索引bisect_left(list_, item)
和<{1}}
这可以为您提供bisect_left(list_, item) - 1
次搜索的结果 - 从算法的角度来看,它并没有比这更好。
答案 1 :(得分:3)
您可以使用bisect
module's bisect
函数获取item
适合的索引
list_, item = [0, 3.5, 5.8, 6.2, 88], 4.4
from bisect import bisect
print bisect(list_, item)
# 2
请记住您的list_
必须排序,以便能够使用bisect
模块中的功能。
答案 2 :(得分:1)
我会使用numpy:
from numpy import *
x = array([0, 3.5, 5.8, 6.2, 88])
item = 4.4
i= argmin(abs(x-item))
print(i)