我需要在Python中创建一个列表列表,所以我输入以下内容:
myList = [[1] * 4] * 3
Run Code Online (Sandbox Code Playgroud)
列表看起来像这样:
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
然后我改变了最里面的一个值:
myList[0][0] = 5
Run Code Online (Sandbox Code Playgroud)
现在我的列表看起来像这样:
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?
我有一份清单说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.
我在我的程序中遇到了问题而且我不确定我做错了什么.首先,我创建了一个空的列表列表.例如:
>>> Lists = [[]]*12
Run Code Online (Sandbox Code Playgroud)
这使:
>>> Lists
[[], [], [], [], [], [], [], [], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)
但是,在尝试将值附加到单个子列表时,它会将值添加到所有子列表.例如:
>>> Lists[2].append(1)
Run Code Online (Sandbox Code Playgroud)
得到:
>>> Lists
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
Run Code Online (Sandbox Code Playgroud)
有没有办法只附加到一个子列表,以便结果如下所示:
>>> Lists
[[], [], [1], [], [], [], [], [], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)