我有两个列表列表,我想从两个列表中逐元素求和
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)
但这给了我错误的结果。
答案 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]]