2014-09-26 27 views
2

我试图通过解构它来理解列表理解。 假设我有一个矩阵定义为列表的列表。 (是的,我知道numpy的,这是不是一个简单有效的方式这样做。这是一个大概的了解。) 和标量嵌套列表解析如何在python中工作?

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) 

并将其返回

正如= [[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 

此返回

正如= [7,14,14,14,21,42,21,28,84]

扁平列表,其中不是我想要的。 我怎么能写

[S *我为我行]在连续]

嵌套的循环和有它返回一个嵌套列表,看看清楚它相对于做这个3X3矩阵?当然,我想定义一个函数,如ScalarMult,它适用于任何大小的矩阵。

回答

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 

(即你开始。)

希望这可以让事情更清楚。

+0

NPE是的工作表示感谢。我不明白如何在列表中定义列表。 – 2014-09-26 15:34:00