查找最接近列表中值的变量

时间:2015-05-21 12:00:32

标签: python

我有一个变量列表[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]到1位小数。我有一个变量B,可以是任何数字到小数位。 我想在列表中找到最接近变量B的值。 并且不是返回值而是返回A数(例如A5)。

3 个答案:

答案 0 :(得分:1)

from operator import itemgetter

a = [A1, A2, ........, A10]
minimum_list = [abs(variable - B) for variable in a]

return min(enumerate(minimum_list), key=itemgetter(1))[0]

这将返回具有最小差异的变量的索引。

return a[min(enumerate(minimum_list), key=itemgetter(1))[0]]

这将返回列表中与变量B

的最小差异的值

答案 1 :(得分:0)

如果你知道numpy,你可以这样写:

matA = array([A1, A2, A3, A4, A5, A6, A7, A8, A9, A10])
matB = array([B])
diff = abs(matA - matB)
minDiffValue = min(diff)

然后,编写这样的代码来查找元素的索引:

closeValueIndex = []
index = 0
for i in diff:
    if i == minDiffValue:
        closeValueIndex.append(index)
    index += 1

答案 2 :(得分:0)

In [1]: vals = [0.8, 5.0, 10.2, 15.6]
        value = lambda myvalue: min(vals, key=lambda x: abs(x - myvalue))
        value(9.8)
Out[1]: 10.2

但是如果你想返回一个我认为你想要的非数字答案。只需使用相同但使用字典和值作为键,您想要的答案作为值:

In [2]: vals = {0.8:'A1', 5.0:'A2', 10.2:'A3', 15.6:'A4'}
        value = lambda myvalue: vals.get(min(vals, key=lambda x: abs(x - myvalue)))
        value(9.8)
Out[2]: 'A3'