在元素方面找到两个列表的总和

时间:2019-09-20 07:16:20

标签: python list nested sum

我有两个列表列表,我想从两个列表中逐元素求和

list1 = [[1, 2, 3], [4, 5, 6]]
list2 = [[10, 2, 3], [11, 5, 6]]

结果应为[11, 4, 6], [15, 10, 12]
目前,我有

for i in len(list1):
    sum = list1[i] + list2[i]
print(sum)

但这给了我错误的结果。

3 个答案:

答案 0 :(得分:2)

您可以像使用zip

>>> list1
[[1, 2, 3], [4, 5, 6]]
>>> list2
[[10, 2, 3], [11, 5, 6]]
>>> [[x+y for x,y in zip(l1, l2)] for l1,l2 in zip(list1,list2)]
[[11, 4, 6], [15, 10, 12]]

或者,如果不确定两个列表的长度是否相同,则可以使用zip_longest中的izip_longest(在python2中为itertools)并使用{{1} },

fillvalue

然后您可以将其用于大小不等的数据,

>>> import itertools
>>> y = itertools.zip_longest([1,2], [3,4,5], fillvalue=0)
>>> list(y)
[(1, 3), (2, 4), (0, 5)]

答案 1 :(得分:1)

在Python中,几乎不需要使用索引,尤其是对于这样的任务,您想对每个元素分别执行相同的操作。这类转换的主要功能是map,列表推导提供了便捷的简写。但是,map会做一件事却不做-并行处理多个可迭代对象,例如Haskell的zipWith。我们可以分为两个阶段来做到这一点:

list1 = [[1, 2, 3], [4, 5, 6]]
list2 = [[10, 2, 3], [11, 5, 6]]
from operator import add
def addvectors(a, b):
    return list(map(add, a, b))
list3 = list(map(addvectors, list1, list2))

在Python 2中,map返回一个列表,因此您无需像在这里使用list一样单独收集它。

答案 2 :(得分:0)

您可以为此使用numpy:

import numpy as np
list1=[[1, 2, 3], [4, 5, 6]]
list2=[[10, 2, 3], [11, 5, 6]]
list1_np = np.asarray(list1)
list2_np = np.asarray(list2)
total = list1_np + list2_np
print(total)

[[11 4 6]  [15 10 12]]