错误理解Python中的列表?

时间:2017-03-21 18:01:47

标签: python list

我是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)]

2 个答案:

答案 0 :(得分:1)

问题在于您尚未发布的代码部分(这就是您在此处提出问题时应发布完整示例的原因)。

发生的事情是l包含对相同列表的三个引用。将元素追加到该列表然后打印l时,您仍会看到该列表的三个副本。

您需要以真正制作三个单独列表的方式创建l

l = [ [], [], [] ] #good
l = [ [] for x in range(3) ] #good
l = [ [] ] * 3  #bad

答案 1 :(得分:0)

同一个清单的三个副本

您似乎构建了自己的列表' l'不是来自三个空列表,而是三个对相同单个空列表的引用。这意味着如果你通过l [1]查看相同的列表,那么通过l [0]对其进行的任何更改都会反映出来。