获取索引值的有效方法

我有一个带有x,y值的元组列表。我想在列表中找到最接近的x值的索引。以下是我的代码。

# list of coords
a = [(376,220),(350,218),(324,216),(298,214),(271,211),(245,210),(219,208),(192,205),(166,204)]
to_find = (190,210)

#grab a new list with only x axis elements
lst = []
for i in range(len(a)):
    lst.append(a[i][0])

#list of all x coordinates
print(lst)

#find the min closest element
def min_closest(lst,K):
    return lst[min(range(len(lst)),key=lambda i: abs(lst[i] - K))]

#print the corresponding index
print(lst.index(min_closest(lst,to_find[0])))

我用x值制定了一个新列表。最后,我将搜索列表的x值与x列表进行了比较,以找到最接近的可能元素。后来我抓住了它的索引。有什么有效的方法吗?

kuangxielang 回答:获取索引值的有效方法

您完成了全部操作,但又采取了额外的步骤:

a = [(376,220),(350,218),(324,216),(298,214),(271,211),(245,210),(219,208),(192,205),(166,204)]
to_find = (190,210)

ix = min(range(len(a)),key = lambda x: abs(a[x][0] - to_find[0]))
print(ix)

输出:

7

另一种方式,可能会更快:

a = [(376,210)

min_diff,min_ix = 999999999,None
for ix,value in enumerate(a):
    diff = abs(to_find[0] - value[0])
    if diff < min_diff:
        min_diff,min_ix = diff,ix
print(min_ix)
,

a转换为numpy.array,然后使用np.argmin

arr = np.array(a)
diffs = np.abs(arr - to_find)
arr[np.argmin(diffs[:,0])]
#OUTPUT array([192,205])
,

尝试使用scipy.spatial.distance.euclidean

from scipy.spatial.distance import euclidean
a = [(376,210)
print(min(a,key = lambda x: euclidean(x,to_find)))

输出:

(192,205)
本文链接:https://www.f2er.com/3153769.html

大家都在问