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

2 投票
2 回答
2221 浏览
提问于 2025-04-18 04:05

我有一个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

这个列表是排好序的,而且没有重复的值,所以如果我找到一个索引,那就是正确的索引。

你知道有没有什么内置的方法或者库,可以比我的代码更快地做到这一点吗?

2 个回答

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
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 lg N),而逐个查找的速度是(O (N))。

撰写回答