在Python中初始化二维数组?

时间:2016-11-04 06:13:00

标签: python arrays

我想知道python中这两种不同的2D矩阵初始化方法有什么区别。

    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)在程序中实现时给出了正确的答案。

1 个答案:

答案 0 :(得分:1)

在第一个中,您将相同的引用存储在m中的列表k中。 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