查找最接近列表中未完全排序的值的项目的索引

ema*_*mad 51 python search list

作为一个例子,我的列表是:

[25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799]
Run Code Online (Sandbox Code Playgroud)

我正在寻找最接近的值的索引11.5.我尝试了其他方法,如二进制搜索,bisect_left但它们不起作用.

我无法对此数组进行排序,因为该值的索引将用于类似的数组以获取该索引处的值.

And*_*ark 120

请尝试以下方法:

min(range(len(a)), key=lambda i: abs(a[i]-11.5))
Run Code Online (Sandbox Code Playgroud)

例如:

>>> a = [25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799]
>>> min(range(len(a)), key=lambda i: abs(a[i]-11.5))
16
Run Code Online (Sandbox Code Playgroud)

或者获取索引和值:

>>> min(enumerate(a), key=lambda x: abs(x[1]-11.5))
(16, 11.33447)
Run Code Online (Sandbox Code Playgroud)

  • `def find_nearest(array, value): array = np.asarray(array); idx = (np.abs(array - value)).argmin(); return idx;` 执行得更快(灵感来自 /sf/answers/179655591/) (6认同)

Car*_*nig 9

import numpy as np

a = [25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799]

index = np.argmin(np.abs(np.array(a)-11.5))
a[index] # here is your result
Run Code Online (Sandbox Code Playgroud)

如果 a 已经是一个数组,则可以省略相应的转换。