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