在已排序的Python列表中,找到与目标值最接近的值及其在列表中的索引

use*_*758 0 python list python-3.x

我试图在 python 的排序列表中获取最接近的值及其索引。

在 MATLAB 中,可以通过以下方式实现:

[closest_val,index] = min(abs(array - target))
Run Code Online (Sandbox Code Playgroud)

我想知道是否有类似的方法可以在 python 中实现。

我见过同时执行其中一项或另一项的帖子,但我还没有看到两者同时完成。

链接到在列表帖子中查找最接近的值。

hir*_*ist 6

这是一个选项:

lst = [
    13.09409,
    12.18347,
    11.33447,
    10.32184,
    9.544922,
    8.813385,
]

target = 11.5

res = min(enumerate(lst), key=lambda x: abs(target - x[1]))
# (2, 11.33447)
Run Code Online (Sandbox Code Playgroud)

enumerate成对迭代您的列表index, value。该方法keymin告诉它只考虑value.

请注意,python 开始索引于0; 1据我所知,matlab 。如果你想要同样的行为:

res = min(enumerate(lst, start=1), key=lambda x: abs(target - x[1]))
# (3, 11.33447)
Run Code Online (Sandbox Code Playgroud)

如果列表很大,我强烈建议您按照此答案bisect中的建议使用。