我有一个包含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']]
有人可以解释这里发生了什么吗?感谢
答案 0 :(得分:3)
构建列表的方式,最终外部列表中填充了对同一内部列表的引用。 e.g:
>>> l = [[None]*4]*4
>>> print [ id(x) for x in l ]
[39323552, 39323552, 39323552, 39323552]
所以你可以看到每个内部列表都有相同的ID - 换句话说,它们都是相同的列表。
尝试:
list4x4 = [[None]*4 for _ in range(4)]