如何在不使用numpy的情况下乘以并获得以下列表中的列表总和?
pattern = [40, 30, 20, 10]
data_list =[[-1, 2, -2, 3], [2, -2, 3, 41], [-2, 3, 41, 38], \
[3, 41, 38, 22], [41, 38, 22, 10], [38, 22, 10, -1], [22, 10, -1, 3]]
我想将data_list中的每个元素乘以模式,并获得以下结果。
expected_answer = [10, 490, 1210, 2330, 3320, 2370, 1190]
我试过了:
sum([i*j for i,j in zip(data_list, pattern)])
但我一直收到这个错误:
TypeError: unsupported operand type(s) for +: 'int' and 'list'
答案 0 :(得分:0)
您想要pattern
对data_list
进行卷积吗?
迭代data_list
并获取iteratee子列表中每个元素的乘积和pattern
中相应元素的总和:
answer = [sum(x*y for x, y in zip(lst, pattern)) for lst in data_list]
print(answer)
# [10, 490, 1210, 2330, 3320, 2370, 1190]
关于您的错误:i * j
执行列表乘法/复制(不是您想要的),因为i
是一个列表而j
是一个整数,然后是{{3}尝试将第一个结果列表添加到默认的start
参数0
。