在矩阵中设置值-Python

2024-09-28 17:15:20 发布

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

我做了矩阵5x3

field = []
fields = []
    for i in range(0,5):
        for j in range(0,3):
            x = 1
            field.append(x)
    fields.append(field)

当我想改变一个领域

fields[2][2] = 0

我明白了:

fields[0][0] = 1
fields[0][1] = 1
fields[0][2] = **0**
fields[1][0] = 1
fields[1][1] = 1
fields[1][2] = **0**
fields[2][0] = 1
fields[2][1] = 1
fields[2][2] = **0**
fields[3][0] = 1
fields[3][1] = 1
fields[3][2] = **0**
fields[4][0] = 1
fields[4][1] = 1
fields[4][2] = **0**

相反,一个零钱我就得到五个


Tags: infieldfieldsforrange矩阵领域append
2条回答

这是因为在所有行中都有对相同field的引用。

你想要这个:

for i in range(0,5):
    field = []
    for j in range(0,3):
        x = 1
        field.append(x)
    fields.append(field)

field应该为每一行重置。所以你应该把它放在第一个循环里。现在你的fields[2][2] = 0可以工作了。

>>> fields
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
>>> fields[2][2] = 0
>>> fields
[[1, 1, 1], [1, 1, 1], [1, 1, 0], [1, 1, 1], [1, 1, 1]]

发生这种情况的原因是,列表的每一行都引用同一个对象,即名为field的列表。通过查看每行的id可以看到这一点。你会发现:

id(fields[0]) == id(fields[1])
id(fields[0]) == id(fields[2])

等等。实际上每一行都是同一个对象。

您需要为每一行创建一个单独的列表:

fields = []
for i in range(0,5):
    field = []
    for j in range(0,3):
        x = 1
        field.append(x)
    fields.append(field)

现在你会看到:

id(fields[0]) != id(fields[1])

等等。并且您修改单个元素的尝试将按照您的意愿进行。

但实际上,如果你想使用矩阵,那么你应该使用numpy。

相关问题 更多 >