在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
这个列表是排好序的,而且没有重复的值,所以如果我找到一个索引,那就是正确的索引。
你知道有没有什么内置的方法或者库,可以比我的代码更快地做到这一点吗?
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))。