簡體   English   中英

Python:如何在兩個列表中對元素進行乘法和求和(不使用庫)?

[英]Python: How do I multiply and sum elements across two lists (without using a library)?

我有兩個包含數字列表的列表(m1和m2)。 我正在嘗試進行元素乘法和求和,包括交叉乘積以獲得最終列表(結果),如下所示:

m1 = [[1, 2, 3], [4, 5, 6]]
m2 = [[7, 9, 2], [8, 1, 3]]

[[1*7+2*9+3*2,1*8+2*1+3*3],[4*7+5*9+6*2,4*8+5*1+6*3]]

result = [[31,19],[85,55]]

您可以使用python 內置函數和嵌套列表解析:

>>> [[sum(t*k for t,k in zip(i,j)) for j in m2] for i in m1]
[[31, 19], [85, 55]]

您還可以使用itertools.product查找子列表之間的產品:

>>> from itertools import product
>>> [sum(t*k for t,k in zip(i,j)) for i,j in product(m1,m2)]
[31, 19, 85, 55]

讓我們把問題分解成更小的部分。 在最低級別,我們有兩個小列表: [1, 2, 3][7, 9, 2]並希望逐項繁殖它們:

item1 = [1, 2, 3]
item2 = [7, 9, 2]
zip(item1, item2)                        # ==> [(1, 7), (2, 9), (3, 2)]
[x * y for x, y in zip(item1, item2)]    # ==> [7, 18, 6]
sum(x * y for x, y in zip(item1, item2)) # ==> 31

現在,我們可以在雙循環中使用它:

[[sum(x * y for x, y in zip(item1, item2)) for item2 in m2] for item1 in m1]
# ==> [[31, 19], [85, 55]]

如果你想要它而不導入任何模塊,你可以這樣做:

>>> m1 = [[1, 2, 3], [4, 5, 6]]
>>> m2 = [[7, 9, 2], [8, 1, 3]]
>>> [[sum(map(lambda (s,t):s*t, zip(x,y))) for y in m2] for x in m1]
[[31, 19], [85, 55]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM