【问题标题】: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.productmax 一起使用:

    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))
      

      如果arrayOnearrayTwo 是嵌套列表([[1, 2], [3, 3], [3, 5], [4, 9]])并且您需要找到最大和的元素:

      max_sum = max(map(sum, arrayOne + arrayTwo))
      

      P. S. 下次请提供输入和输出示例,不要让我们猜测您需要什么。

      【讨论】:

      • 这将值配对,而不是列表中的每个元素。
      【解决方案4】:

      要找到两个长度分别为 nm 的数组的元素的所有成对和的最大值,只需

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        相关资源
        最近更新 更多