在Python列表中查找值的索引(具有近似值)

时间:2014-04-24 12:43:48

标签: python

我有一个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排序,所以如果我找到一个索引,它就是正确的索引。

你知道是否有任何内置方法可以做到这一点,或者是一个比我的代码更快地执行此操作的库?

2 个答案:

答案 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