我是Python的新手,所以如果这个问题很天真,我会道歉。
我考虑一个列表elements = [3, 6, 7]
。我想写一系列指令,将列表l = [[], [], []]
转换为l = [[3], [6], [7]]
。如果我写下面的(天真)代码:
pos = 0
for i in range(3):
l[i].append(elements[i])
print(l)
然后输出不像我预期的那样。实际上,列表l
变为l=[[3, 6, 7], [3, 6, 7], [3, 6, 7]]
。我的理由如下:只应修改i=0
l[0]
(l
的第一个元素)。但事实并非如此。在循环中首次运行后,列表l
为:l = [[3], [3], [3]]
。我哪里错了?
当然,使用列表理解可以很容易地解决这个问题:
l = [[elements[j]] for j in range(3)]
答案 0 :(得分:1)
问题在于您尚未发布的代码部分(这就是您在此处提出问题时应发布完整示例的原因)。
发生的事情是l
包含对相同列表的三个引用。将元素追加到该列表然后打印l
时,您仍会看到该列表的三个副本。
您需要以真正制作三个单独列表的方式创建l
:
l = [ [], [], [] ] #good
l = [ [] for x in range(3) ] #good
l = [ [] ] * 3 #bad
答案 1 :(得分:0)
您似乎构建了自己的列表' l'不是来自三个空列表,而是三个对相同单个空列表的引用。这意味着如果你通过l [1]查看相同的列表,那么通过l [0]对其进行的任何更改都会反映出来。