gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:51:05 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com