2014-09-26 25 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