Суммирование каждого элемента двух массивов - PullRequest
0 голосов
/ 05 июня 2019

У меня есть два массива, и я хочу суммировать каждый элемент обоих массивов и найти максимальную сумму. Я запрограммировал это так:

sum = []
for element in arrayOne:
    sum.append(max([item + element for item in arrayTwo]))
print max(sum)

Есть ли лучший способ добиться этого?

Ответы [ 4 ]

3 голосов
/ 05 июня 2019

Вы можете использовать NumPy.

import numpy as np

a = np.array(arrayOne)
b = np.array(arrayTwo)
max = max(a + b)
print(max)
2 голосов
/ 05 июня 2019
max_sum = max(map(sum, zip(arrayOne, arrayTwo)))

Upd. Если вам нужно max из суммы всех элементов в массиве:

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. В следующий раз, пожалуйста, приведите примеры ввода и вывода, чтобы мы не могли угадать, что вам нужно.

2 голосов
/ 05 июня 2019

Используйте itertools.product с max:

from itertools import product
print(max(sum(x) for x in product(arrayOne, arrayTwo)))

Или используйте карту:

print(max(map(sum,product(arrayOne, arrayTwo))))
1 голос
/ 05 июня 2019

Чтобы найти максимум всех попарных сумм элементов двух массивов длин 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 может быть любой функцией из двух числовых параметров, выводящих число (или объект любого класса, который реализует упорядочение ).

Кстати, пожалуйста, избегайте переопределения встроенных подобных sum в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...