我一直在尝试使用语法在python中的二维数组中更改单个项目,x[2][3]=1
但它不仅更改了第二行第三列中的项目,而且最终更改了所有第三列中的值。我的代码如下:
population = [[0]*20]*5
population[2][3] = 1
for row in population:
print(row)
这个输出
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但我只想要
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我将如何索引该项目,使其仅更改第二行和第三列?
我在repl.it上使用python 3.7.4
链接在这里:https : //repl.it/@ajqe/2d-array-test
采用 :
population = [[0]*20 for _ in range(5)]
生成列表。您正在使用的方法引用同一对象5次,而不是创建5个单独的列表。要检查这一点,可以使用is
运算符:
>>> population = [[0]*20]*5
>>> population[0] is population[1]
True
>>> population = [[0]*20 for _ in range(5)]
>>> population[0] is population[1]
False
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句