use*_*758 0 python list python-3.x
我试图在 python 的排序列表中获取最接近的值及其索引。
在 MATLAB 中,可以通过以下方式实现:
[closest_val,index] = min(abs(array - target))
Run Code Online (Sandbox Code Playgroud)
我想知道是否有类似的方法可以在 python 中实现。
我见过同时执行其中一项或另一项的帖子,但我还没有看到两者同时完成。
链接到在列表帖子中查找最接近的值。
这是一个选项:
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。该方法key的min告诉它只考虑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中的建议使用。