Как сложить умножение всех чисел в списке с другими числами в другом списке.(Тот же порядок) - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу суммировать умножение на 2 списка соответственно (a [0] с b [0] до a [n] с b [n]) Примечание: я использую n, потому что список a и b является свободным вводом,так что их может быть много.

Если введенные данные:

A = [ 12 , 0 , 3 , 7 , 2]
B = [ 1 , 2 , 5 , 4]

Я хочу сумму A * B (12 * 1 + 0 * 2 + 3 * 5 +7 * 4 + 2 * 0 (так как в Б больше нет))

Ответы [ 2 ]

4 голосов
/ 07 апреля 2019

Использование itertools.zip_longest с аргументом fillvalue:

sum(x*y for x, y in zip_longest(A, B, fillvalue=0))

Код :

from itertools import zip_longest

A = [12, 0, 3, 7, 2]
B = [1, 2, 5, 4]

print(sum(x*y for x, y in zip_longest(A, B, fillvalue=0)))
# 55

, поскольку fillvalue является0, и это не вызывает никаких изменений в операции (2 * 0 = 0), вы также можете просто использовать zip:

sum(x*y for x, y in zip(A, B))


A функциональный подход довольно питонический (при условии, что fillvalue по-прежнему равен 0):
from operator import mul

A = [12, 0, 3, 7, 2]
B = [1, 2, 5, 4]

print(sum(map(mul, A, B)))
# 55
1 голос
/ 07 апреля 2019

Если всегда случается, что len(A) >= len(B)

>>> sum([A[i]*B[i] for i in range(len(B))])
55

иначе измените это на

sum([A[i]*B[i] for i in range(min([len(A), len(B)]))])

Обновление

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

>>> sum([a*b for a, b in zip(A, B)])
55
...