【问题标题】:Find variable closest to a value in a list [duplicate]在列表中查找最接近值的变量[重复]
【发布时间】:2015-08-03 02:03:42
【问题描述】:

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

【问题讨论】:

  • 欢迎科林!你试过什么?你能发布你的代码并解释你在实现它时遇到了什么问题吗?
  • 你真的想要变量的name,还是列表中的索引?前者通常不会(很容易)实现,但您可以使用字典并返回键。
  • values.index(min(values, key = lambda i : abs(B - i)))
  • 分解一下,您希望列表中difference 最少的值的index 值B。其他提示:for loop

标签: python


【解决方案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 差异最小的值

【讨论】:

    【解决方案2】:

    如果你知道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
    

    【讨论】:

      【解决方案3】:
      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'
      

      【讨论】:

        猜你喜欢
        • 2015-07-26
        • 2017-12-06
        • 2023-03-06
        • 2021-11-20
        • 2020-02-13
        • 2017-06-25
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        相关资源
        最近更新 更多