【问题标题】:Summing each element of two arrays对两个数组的每个元素求和
【发布时间】:2019-06-05 09:22:33
【问题描述】:
我有两个数组,想对两个数组的每个元素求和并找到最大和。
我是这样编程的:
sum = []
for element in arrayOne:
sum.append(max([item + element for item in arrayTwo]))
print max(sum)
有没有更好的方法来实现这一点?
【问题讨论】:
标签:
python
arrays
algorithm
logic
【解决方案1】:
你可以使用 numpy。
import numpy as np
a = np.array(arrayOne)
b = np.array(arrayTwo)
max = max(a + b)
print(max)
【解决方案2】:
将itertools.product 与max 一起使用:
from itertools import product
print(max(sum(x) for x in product(arrayOne, arrayTwo)))
或者使用地图:
print(max(map(sum,product(arrayOne, arrayTwo))))
【解决方案3】:
max_sum = max(map(sum, zip(arrayOne, arrayTwo)))
更新。
如果您需要数组中所有元素之和的最大值:
max_sum = max(sum(arrayOne), sum(arrayTwo))
如果arrayOne 和arrayTwo 是嵌套列表([[1, 2], [3, 3], [3, 5], [4, 9]])并且您需要找到最大和的元素:
max_sum = max(map(sum, arrayOne + arrayTwo))
P. S. 下次请提供输入和输出示例,不要让我们猜测您需要什么。
【解决方案4】:
要找到两个长度分别为 n 和 m 的数组的元素的所有成对和的最大值,只需
max(arrayOne) + max(arrayTwo)
在 O(max(n, m)) 而不是 O(n*m) 中表现最差 查看所有组合时。
但是,如果出于某种原因需要遍历所有对,则解决方案可能是
max(foo(one, two) for one in arrayOne for two in arrayTwo)
其中foo 可以是输出数字的两个数字参数的任何函数(或实现ordering 的任何类的对象)。
顺便说一句,请避免在你的代码中像sum一样重新定义built-ins。