我正在尝试在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/