我的任务是编写一个Python脚本来将相等大小的多维矩阵添加到一起并返回结果。例如,[[3, 6, 7], [2, 7, -4], [0, 1, 0]]
和[[1, 0, 0], [-2, 1, 0], [-1, 1, 3]]
应返回[[4, 6, 7], [0, 8, -4], [-1, 2, 3]]
我这样写了它并且工作正常:
def addition(a, b):
if len(a) == len(b):
c = [[] for i in range(len(a))]
for i in range(len(a)):
for j in range(len(a[i])):
c[i].append(a[i][j] + b[i][j])
return c
else:
print('error')
接下来我想知道是否有可能使用列表理解更简洁地重写这个,这是我的第一次尝试:
def addition(a, b):
return [[a[i][j] + b[i][j]] for i in range(len(a)) for j in range(len(a[i]))]
但是,使用a
和b
的相同值,我得到以下结果:
>>> a = [[3, 6, 7], [2, 7, -4], [0, 1, 0]]
>>> b = [[1, 0, 0], [-2, 1, 0], [-1, 1, 3]]
>>> addition(a, b)
[[4], [6], [7], [0], [8], [-4], [-1], [2], [3]]
答案 0 :(得分:4)
当您要进行这样的元素操作时,您可以使用zip
按顺序操作列表。
def addition(a,b):
return [[i+j for i,j in zip(sub1, sub2)] for sub1, sub2 in zip(a, b)]
>>> l1 = [[3, 6, 7], [2, 7, -4], [0, 1, 0]]
>>> l2 = [[1, 0, 0], [-2, 1, 0], [-1, 1, 3]]
>>> addition(l1, l2)
[[4, 6, 7], [0, 8, -4], [-1, 2, 3]]
答案 1 :(得分:3)
如果你稍微移动括号和索引,你可以得到你想要的东西:
def addition(a,b):
return [[a[i][j]+b[i][j] for j in range(len(a[i]))] for i in range(len(a))]
(或者你可以使用zip
,正如Cyber建议的那样。)