Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修改代码以将两个列表相加(按元素)_Python_Python 2.7 - Fatal编程技术网

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是的。只要列表不是numpy
1+10=20
?什么?非常感谢。但是我想使用列表而不是numpy.Updated来添加非
numpy
解决方案。你为什么要使用
numpy
,但是有些人将无法使用
pip
,因为它需要终端/命令提示符访问,而这通常在机构中是受到限制的。我没想过。非常感谢注意:这不适用于任何数量的嵌入式
列表
。@JoeIddon:你能详细说明一下嵌入式列表是什么意思吗?@KaushikNP像一个三维数组,或者更一般地说是一个N>2的N-D数组。@ArthurSpoon是的,我的回答中有一个更复杂的例子,其中
列表
不是“矩形”(在
numpy
中称为矩形)注意:这不适用于任何数量的嵌入式
列表。