2016-11-04 96 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