Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在矩阵中设置值-Python_Python_Arrays_Multidimensional Array_Matrix_Setting - Fatal编程技术网

在矩阵中设置值-Python

在矩阵中设置值-Python,python,arrays,multidimensional-array,matrix,setting,Python,Arrays,Multidimensional Array,Matrix,Setting,我做了一个矩阵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**

我做了一个矩阵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**


相反,我得到了五个更改,原因是列表中的每一行都引用了相同的对象,列表名为
字段
。通过查看每行的
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。

这是因为您在所有行中都引用了相同的
字段

你想要这个:

for i in range(0,5):
    field = []
    for j in range(0,3):
        x = 1
        field.append(x)
    fields.append(field)
字段
应为每行重置。这就是为什么你应该把它放在第一个循环中。现在您的
字段[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]]

我只想更改一个字段,我不知道为什么,但在这种方式下,他总是更改5个字段(对于字段[x][y],他更改的是整个y列,而不是xy值)