Python 修改代码以将两个列表相加(按元素)
我想对两个列表求和(按元素)。我举了以下例子:Python 修改代码以将两个列表相加(按元素),python,python-2.7,Python,Python 2.7,我想对两个列表求和(按元素)。我举了以下例子: from operator import add L1 = [[1,2,3], [4,5,6], [7,8,9]] L2 = [[10,20,30], [40,50,60], [70,80,90]] W = map(add, L1, L2) print (W) 但结果是: [[1, 2, 3, 10, 20, 30], [4, 5, 6, 40, 50, 60], [7, 8, 9, 70, 80, 90]] 我想对元素进行求和(例如1+10
from operator import add
L1 = [[1,2,3], [4,5,6], [7,8,9]]
L2 = [[10,20,30], [40,50,60], [70,80,90]]
W = map(add, L1, L2)
print (W)
但结果是:
[[1, 2, 3, 10, 20, 30], [4, 5, 6, 40, 50, 60], [7, 8, 9, 70, 80, 90]]
我想对元素进行求和(例如1+10=20,2+20=20,…等等)。可以修改此代码以实现我想要的吗?这是因为当您将两个列表添加到一起时,实际上使用的是一个串联 除非您有充分的理由不使用
numpy
,否则这很容易做到:
import numpy as np
L1 = np.array([[1,2,3], [4,5,6], [7,8,9]])
L2 = np.array([[10,20,30], [40,50,60], [70,80,90]])
W = L1 + L2
或者,不使用numpy
,并且在我看来比使用zip
更清楚一点:
W = [list(map(add,L1[i],L2[i])) for i in range(len(L1))]
将
zip
和map
与列表理解一起使用
:
>>> temp = zip(L1, L2)
# >>> list(temp)
# => [([1, 2, 3], [10, 20, 30]), ([4, 5, 6], [40, 50, 60]), ([7, 8, 9], [70, 80, 90])]
>>> [list(map(sum, zip(x,y))) for x,y in temp]
=> [[11, 22, 33], [44, 55, 66], [77, 88, 99]]
注意:只使用zip(L1,L2)
比使用list(zip(L1,L2))
要好,因为前者返回一个生成器
,它比构建列表更高效、更快。您可以尝试以下方法:
L1 = [[1,2,3], [4,5,6], [7,8,9]]
L2 = [[10,20,30], [40,50,60], [70,80,90]]
final_list = [[c+d for c, d in zip(a, b)] for a, b in zip(L1, L2)]
输出:
[[11, 22, 33], [44, 55, 66], [77, 88, 99]]
下面是一个非常简洁(即使我自己也这么说)的递归解决方案:
def add(l1, l2):
return [add(l1[i], l2[i]) if type(l1[i]) == list else l1[i] + l2[i] for i in range(len(l1))]
当使用add(L1,L2)
运行时,它给出:
[[11, 22, 33], [44, 55, 66], [77, 88, 99]]
这个函数最酷的一点是,无论
列表如何嵌入,它都能工作,即使存在混合(即非矩形)
下面是该功能的一个很好的示例:
>>> add([1, [2, 3, [4, 5]], 6], [7, [3, 4, [2, 4]], 1])
[8, [5, 7, [6, 9]], 7]
您正在添加列表,您需要做的是添加列表的元素:)您想要一个适用于列表的任何维度的解决方案吗?@JoeIddon是的。只要列表不是numpy1+10=20
?什么?非常感谢。但是我想使用列表而不是numpy.Updated来添加非numpy
解决方案。你为什么要使用numpy
,但是有些人将无法使用pip
,因为它需要终端/命令提示符访问,而这通常在机构中是受到限制的。我没想过。非常感谢注意:这不适用于任何数量的嵌入式列表。@JoeIddon:你能详细说明一下嵌入式列表是什么意思吗?@KaushikNP像一个三维数组,或者更一般地说是一个N>2的N-D数组。@ArthurSpoon是的,我的回答中有一个更复杂的例子,其中列表不是“矩形”(在numpy
中称为矩形)注意:这不适用于任何数量的嵌入式列表。