2014-04-04 42 views

回答

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)
bisect_left(list_, item) - 1

这应该给你O(logN)搜索结果中的项目 - 它没有得到从算法的角度来看比这更好。

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

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) 
相关问题