2016-11-04 95 views
0

我想知道python中這兩種不同的二維矩陣初始化方法有什麼區別。在Python中初始化一個二維數組?

m =[] 
    K = [] 
    for x in range(0,W+1): 
     m.append(0) 
    for x in range(0,n+1): 
     K.append(m) 

l = [] 
    for j in range(0,n+1): 
     l.append([]) 
     for i in range(0,W+1): 
      l[j].append(0)) 

,當我試圖打印L&K型兩者給出了相同的答案,但是當我試圖實現它的代碼程序的輸出變化。

較早的一個(K)給出了一個不正確的答案,但後來的一個(l)在程序中實現時給出了正確的答案。

+0

您已經更明確地實現了它,但是您遇到了列表倍增人員在重複中遇到的同樣問題。 – ShadowRanger

回答

1

在第一個中,您正在存儲與k中的列表m相同的參考。在m中的變化將體現在所有的參考文獻中。

第二,你在l中創建新列表。因此,一個變化與另一個變化無關。

另外,更簡單的初始化列表的方式是:

  • 保持相同的參考list(類似於你的第一種方法)是:

    >>> row, columns = 2, 3 
    >>> my_list = [[0]*columns]*row 
    >>> my_list 
    [[0, 0, 0], [0, 0, 0]] 
    >>> my_list[0][1] = 1 # changing value 
    >>> my_list 
    [[0, 1, 0], [0, 1, 0]] 
    # ^  ^Reflected in all 
    
  • 持有不同的參考到名單(類似於你的第二種方法)是:

    >>> my_list = [[0]*columns for i in range(row)] 
    >>> my_list 
    [[0, 0, 0], [0, 0, 0]] 
    >>> my_list[0][1] = 1 # changing value 
    >>> my_list 
    [[0, 1, 0], [0, 0, 0]] 
    # ^only one value is changed