Python:如何在两个单独的数组之间找到两个相等/最接近的值?

标签 python comparison

假设我们有两个等长的数组:

arr1 = (21, 2, 3, 5, 13)
arr2 = (10, 4.5, 9, 12, 20)

arr1 中的哪个变量等于/最接近 arr2 中的变量?

查看这两个列表,我们可以很容易地得出最接近的数字是 4.55。我已经尝试实现一个函数,它在给定两个列表的情况下返回两个最接近的值,并且它对上面的示例有点工作,但它几乎不是一个解决方案,因为它不是最佳的。当我们像这样稍微更改数组时,您可以轻松地检查函数是否失败:

arr1 = (21, 2, 3, 5, 13)
arr2 = (10, 4.5, 9, 12, 18)

函数返回的值是 13 和 18

函数如下:

def get_nearest(arr1, arr2):
    lr = [[0, 0, 0]]
    for x1 in arr1:
        for x2 in arr2:
            r = (x1 / x2 % (x1 + x2))
            print x1, x2, r
            if r <= 1 and r >= lr[0][2]:
                lr.pop()
                lr.append([x1, x2, r])
    return lr

你能想出一个更好的吗?

最佳答案

速度是个问题吗?你在乎领带吗?如果不是,那么简单的事情怎么样

from itertools import product
sorted(product(arr1, arr2), key=lambda t: abs(t[0]-t[1]))[0]

两者皆有

arr1 = (21, 2, 3, 5, 13)
arr2 = (10, 4.5, 9, 12, 20)

arr1 = (21, 2, 3, 5, 13)
arr2 = (10, 4.5, 9, 12, 18)

这产生

(5, 4.5)

解释:

product(arr1, arr2) = [(a1, a2) for (a1, a2) in product(arr1, arr2)]

生成所有 N**2 对数字的列表:

[(21, 10), (21, 4.5), ..., (13, 12), (13, 20)]

然后我们使用sorted 按绝对差值(|a1 - a2|) 对它们进行排序。通过将 sorted 传递给 key 关键字,我们告诉 sorted 使用排序标准 lambda t: abs(t[0] - t [1])。绝对差值最小的对放在排序数组的第一个索引中,因此我们可以通过在末尾添加 [0] 来获取它。

编辑:

正如 Piotr 在评论中所建议的,您可以将 key=func 提供给 minmax,这会大大加快速度。试试看:

from itertools import product
min(product(arr1, arr2), key=lambda t: abs(t[0]-t[1]))[0]

关于Python:如何在两个单独的数组之间找到两个相等/最接近的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239786/

相关文章:

python - 仪表板绘图值错误: Invalid value

python - 如何在Python中将函数应用于数据框中的所有列并以数据框的形式输出

python - 如何在 ipython 中将脚本作为模块导入?

java - 排序/比较不同的标准

php - 成功解析 SimpleXMLElement 与 'false' 的比较,返回 'true'

c# - 比较两个 IEnumerable 以检测更改

python - 如何使用生成器遍历文件系统?

python - 如何从Python集合中有效地循环正则表达式搜索

python - 基于Multiindex和dataframe创建MultiIndex Dataframe(比较矩阵)

jquery - Ext JS 与 jQuery 和 Mootools 等其他语言有何不同