我有一个Python列表,我想在其中找到更接近的值的索引。
到目前为止我做了什么:
value = 3.5
mylist = [1,2,3,4,5,6,7,8,9,10]
for i in range(0,len(mylist)+2):
if value > mylist[i] and value < mylist[i+1]:
if abs(mylist[i]-value) < abs(mylist[i+1]-value):
myindex = mylist.index(i)
else:
myindex = mylist.index(i+1)
break
列表没有dublicates排序,所以如果我找到一个索引,它就是正确的索引。
你知道是否有任何内置方法可以做到这一点,或者是一个比我的代码更快地执行此操作的库?
答案 0 :(得分:3)
由于您的列表已排序,您可以使用bisect
模块的bisect
功能,例如
value, mylist = 3.5, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
from bisect import bisect
print bisect(mylist, value)
# 3
这将为您提供元素在列表中所适合的索引,这将比线性搜索(O(N))更快(O lg N)。
答案 1 :(得分:0)
您可以像这样使用itertools.takewhile。
value, mylist = 3.5, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
from itertools import takewhile
print sum(1 for i in takewhile(lambda x: x < value, mylist))
# 3