我想分别对两个列表的乘积求和(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中没有更多))
答案 0 :(得分:4)
将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))
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