我正在尝试在python 3中创建一个随机空白矩阵而不使用numpy。
该代码看起来很完美,但是当我更改单个单元格的值(例如Square 1 [0])时,它将更改所有Square 1 [x]值。

#!/usr/bin/env python3

# Creating a random n*n blank matrix
#for example 6*6

#I'll just create coloumns
def one():

    square = []
    for x in range(6):
        square.append(None)

    Square = []
    for x in range(6):
        Square.append(square)

    return Square

#output is exactly what i want
print(one())

#but when i try to change a single value(cell),

a = one()

a[2][2] = "Error"

#it's bullshit
print(a)


我或我的代码有什么问题?

最佳答案

Square是六个引用的列表,所有引用均指向同一square列表。修改任何这些square引用都会影响所有行。您可以通过查看各行的id值来确认这一点:

a = one()
print id(a[0])
print id(a[1])


结果:

37725768
37725768


而不是制作一个square并将其附加六次,而是制作六个square并将每个附加一次。

def one():
    Square = []
    for y in range(6):
        square = []
        for x in range(6):
            square.append(None)
        Square.append(square)
    return Square


现在,所有行将引用不同的列表。

a = one()
print id(a[0])
print id(a[1])
#result:
#37827976
#37829192




我还建议更改square的名称,因为具有两个仅在大小写上不同的变量名称非常令人困惑。

def make_matrix():
    matrix = []
    for y in range(6):
        row = []
        for x in range(6):
            row.append(None)
        matrix.append(row)
    return matrix

关于python - 在Python 3中创建随机空白矩阵(二维数组)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25022330/

10-12 18:07