如何将一个列表中的所有数字与另一个列表中的另一个数字相乘。 (相同的顺序)

时间:2019-04-07 10:01:47

标签: python sum multiplying dot-product

我想分别对两个列表的乘积求和(a [0]与b [0]直到a [n]与b [n])注意:l使用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(因为B中没有更多))

2 个答案:

答案 0 :(得分:4)

itertools.zip_longestfillvalue参数一起使用:

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


功能性方法是非常Python化的(假设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 :(得分:1)

如果总是发生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