在Python3

时间:2018-03-13 17:59:18

标签: arrays python-3.x

我初始化了一个空的2d数组,如下所示:

matrixLength = (len(a)+1)*(len(b)+1)

matrix = []
    step = []

    for i in range(matrixLength):
        matrix.append(step)

当我打印它时,它给了我这个:

[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
到目前为止一切顺利。但是,当我想迭代2d数组的第一个Len(a)元素时,使用以下代码:

for i in range(0, len(a)+1):
        print(i)
        matrix[i].append(i)

print (matrix)

而不是只填充第一个len(a)元素的数组,如下所示:

[[0], [1], [2], [3], [], [], [], [], [], [], [], [], [], [], [], []]

我得到了这个:

[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

为什么?

1 个答案:

答案 0 :(得分:1)

当您将step设置为[]时,您会创建对列表类型的一个实例的引用,因此当您使用matrix附加step时,您将相同的引用放入所有职位。您可以通过打印所有矩阵元素id轻松验证这一点:

for el in matrix:     
    print(id(el))

您需要为每个元素创建不同的列表:

matrixLength = (len(a)+1)*(len(b)+1)                   
matrix = []
for i in range(matrixLength):     
     matrix.append(list())

然后您就可以独立更新每个列表了。