速度是个问题吗?你关心关系吗?如果没有,那么简单的事情怎么样?
from itertools import product
sorted(product(arr1, arr2), key=lambda t: abs(t[0]-t[1]))[0]
For both
arr1 = (21, 2, 3, 5, 13)
arr2 = (10, 4.5, 9, 12, 20)
and
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)]
然后我们按绝对差对它们进行排序(|a1 - a2|
) using sorted
。通过传递sorted
the key
关键字,我们告诉sorted
使用排序标准lambda t: abs(t[0] - t[1])
。绝对差最小的对放置在已排序数组的第一个索引中,因此我们可以通过定位来获取它[0]
在最后。
Edit:
正如 Piotr 在评论中建议的那样,您可以提供key=func
to min
and max
,这大大加快了速度。尝试改为:
from itertools import product
min(product(arr1, arr2), key=lambda t: abs(t[0]-t[1]))[0]