0

我有一个包含 16 个字符的列表。我想使用这个列表来填充一个包含 4 个子列表的新列表。这是我所拥有的:

alist = ['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', ' ', '1', '2']

list4x4 = [[None]*4]*4

for i in range(4):
    for j in range(4):
        list4x4[i][j] = alist.pop(0)

print list4x4

这给了我

[['!', ' ', '1', '2'], ['!', ' ', '1', '2'], ['!', ' ', '1', '2'], ['!', ' ', '1', '2']]

而我想要的结果是

[['H', 'e', 'l', 'l'], ['o', ',', ' ', 'w'], ['o', 'r', 'l', 'd'], ['!', ' ', '1', '2']]

有人可以解释这里发生了什么吗?谢谢

4

1 回答 1

3

按照您构建列表的方式,您最终会用对同一内部列表的引用填充外部列表。例如:

>>> l = [[None]*4]*4
>>> print [ id(x) for x in l ]
[39323552, 39323552, 39323552, 39323552]

所以你可以看到每个内部列表都有相同的ID——换句话说,它们都是同一个列表。

尝试:

list4x4 = [[None]*4 for _ in range(4)]
于 2013-02-14T16:39:29.760 回答