Python列表附加错误

时间:2015-04-19 21:47:44

标签: python list append

我尝试同时使用附加多个列表(在连续的行中)。

但是,它将所有项目添加到我的所有列表中。请参阅下面的脚本和结果:

x1=y1=z1=[]
for i in range(1,5):
    x1.append(i)
    y1.append(i*4)
    z1.append(i*10)
print ("\n x1=", x1,"\n y1=", y1,"\n z1=", z1)

结果:

 x1= [1, 4, 10, 2, 8, 20, 3, 12, 30, 4, 16, 40] 
 y1= [1, 4, 10, 2, 8, 20, 3, 12, 30, 4, 16, 40] 
 z1= [1, 4, 10, 2, 8, 20, 3, 12, 30, 4, 16, 40]

感谢您的评论。

3 个答案:

答案 0 :(得分:4)

这是因为x1x2x3绑定到同一个列表。写x1, x2, x3 = [], [], []而不是x1 = x2 = x3 = []

答案 1 :(得分:1)

这是因为所有列表变量都指向同一个列表。

按以下方式初始化您的列表:

x1 = []
y1 = []
z1 = []

执行,x1 = y1导致这两个变量都指向相同的内存空间,因此修改一个使得它看起来就像你正在修改所有这些变量实际上它们都是同一个东西

答案 2 :(得分:0)

如果您只对输出感兴趣,可以使用列表推导做更多的pythonic方法:

print [i for i in range(1,5)]
print [i*4 for i in range(1,5)]
print [i*10 for i in range(1,5)]

或者,如果您想保留这些值,请执行以下操作:

x1 = [i for i in range(1,5)]
y1 = [i*4 for i in range(1,5)]
z1 = [i*10 for i in range(1,5)]
print ("\n x1=", x1,"\n y1=", y1,"\n z1=", z1)

或者如果您真的想缩小代码,可以这样做:

for j in zip(*[[i,i*4,i*10] for i in range(1,5)]): print j