我试图通过解构它来理解列表理解。 假设我将矩阵定义为列表列表。 (是的,我知道numpy这不是以一种简单有效的方式做到这一点。这是关于理解。) 和标量
A = [[1, 2, 3],
[2, 3, 6],
[3, 4, 12]]
s = 7
正如我在别处发现的那样,我可以定义一个列表推导来执行标量乘法。
def ScalarMult(A,s):
return [[s*i for i in row] for row in A]
As = ScalarMult(A,s)
print('As = ', As)
然后返回
As = [[7,14,14],[14,21,42],[21,28,84]]
嵌套列表,这就是我想要的但这是如何工作的?
如果我写
def ScalarMult(A,s):
As = []
for row in A:
for i in row:
As.append(s*i)
return As
返回
As = [7,14,14,14,21,42,21,28,84]
一个扁平的列表,这不是我想要的。 我该怎么写
对于A中的行,[[s * i for i in row]
作为嵌套for循环并让它返回一个嵌套列表,并清楚地看到它对这个3X3矩阵做了什么?当然,我想定义一个函数,例如ScalarMult,它适用于任何大小的矩阵。
答案 0 :(得分:4)
您可以这样写:
def ScalarMult(A,s):
As = []
for row in A:
Arow = []
for i in row:
Arow.append(s*i)
As.append(Arow)
return As
更进一步说明:
def ScalarMult(A,s):
As = []
for row in A:
As.append([s*i for i in row])
return As
进一步提出两个步骤:
def ScalarMult(A,s):
As = [[s*i for i in row] for row in A]
return As
(即你的开始。)
希望这会让事情更加清晰。