在python3中创建一个随机的空白矩阵(2D数组)?

2024-09-29 00:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python3中创建一个随机的空白矩阵,而不使用numpy。 代码看起来很完美,但是当我改变一个单元格的值(例如Square1[0])时,它会改变所有的平方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)

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


Tags: 代码innumpyforusrrange矩阵one
2条回答

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

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

结果:

^{pr2}$

不要生成一个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

您的代码失败,因为您向同一数组追加了6个引用。请参阅凯文的回答以获得更详细的解释。在

创建数组的更“python”方法:

array = [[None]*n for x in range(n)]

这使用list comprehension。在

相关问题 更多 >