Pav*_*van 13 python list python-2.7
我有一份清单说mysolution:
>>>mySolution
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> mySolution[0][0] = 1
>>> mySolution
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
预期产量:
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
为什么我的列表列表中的所有第一个元素都被更改为1?我只想将第一个列表的第一个元素更改为1.
pok*_*oke 15
重要的是你如何创建原始mysolution列表.看起来,它包含相同列表的四倍,这就是为什么更改它一次会使它在所有四个位置都发生变化的原因.
要初始化这样的独立零填充列表,您可以执行以下操作:
mysolution = [[0] * 4 for i in range(4)]
Run Code Online (Sandbox Code Playgroud)
你很有可能像这样创建了这个列表:
mySolution = [0]*4
mySolution = [mySolution]*4
Run Code Online (Sandbox Code Playgroud)
或等效地:
mySolution = [[0]*4]*4
Run Code Online (Sandbox Code Playgroud)
上述任何一个片段都会创建一个包含四个子列表的列表,这四个子列表是完全相同的子列表的副本,因此对一个子列表的任何修改都将反映在其他子列表上 - 它们是同一个.解决方案是创建四个不同的子列表:
mySolution = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
或者更短一些:
mySolution = [[0]*4 for _ in xrange(4)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8616 次 |
| 最近记录: |