输入是元素的排序列表和外部项目。例如:找到另一个项目在python中最接近的列表中哪两个元素的最快方法
list_ = [0, 3.5, 5.8, 6.2, 88]
item = 4.4
什么是查不到之间list_
item
落在这两个元素的最快的方法?例如,在这种情况下,这两个数字将是3.5和5.8。有任何想法吗?
输入是元素的排序列表和外部项目。例如:找到另一个项目在python中最接近的列表中哪两个元素的最快方法
list_ = [0, 3.5, 5.8, 6.2, 88]
item = 4.4
什么是查不到之间list_
item
落在这两个元素的最快的方法?例如,在这种情况下,这两个数字将是3.5和5.8。有任何想法吗?
由于输入是排序的,因此算法上最好使用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)
和bisect_left(list_, item) - 1
这应该给你O(logN)
搜索结果中的项目 - 它没有得到从算法的角度来看比这更好。
可以使用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
。
我会用numpy的:
from numpy import *
x = array([0, 3.5, 5.8, 6.2, 88])
item = 4.4
i= argmin(abs(x-item))
print(i)