值在python中使用append()覆盖以前的值
我试图使用append函数创建一个嵌套列表,但最后一个值将恢复以前的值,任何人都可以告诉我原因以及如何正确执行。 谢谢 输出显示: [4,0,0],[4,0,0],[4,0,0],[4,0,0]] 但我想要的结果是 [1,0,0],[2,0,0],[3,0,0],[4,0,0]]值在python中使用append()覆盖以前的值,python,Python,我试图使用append函数创建一个嵌套列表,但最后一个值将恢复以前的值,任何人都可以告诉我原因以及如何正确执行。 谢谢 输出显示: [4,0,0],[4,0,0],[4,0,0],[4,0,0]] 但我想要的结果是 [1,0,0],[2,0,0],[3,0,0],[4,0,0]] 您的结果列表是[temp,temp,temp,temp]。如果希望对象不同,每次都必须创建一个新的子列表。一个简单的方法是使用列表理解 d = [[i, 0, 0] for i in range(1, 5)] 试试这
您的结果列表是
[temp,temp,temp,temp]
。如果希望对象不同,每次都必须创建一个新的子列表。一个简单的方法是使用列表理解
d = [[i, 0, 0] for i in range(1, 5)]
试试这个:
d= []
temp = [0,0,0]
for i in range(4):
tmp = [t for t in temp]
tmp[0] = i+1
d.append(tmp)
或者,使用OP的代码,只需将
d.append(temp)
更改为d.append(temp[:])
,每次使用“空切片”插入temp
的浅拷贝,而不是另一个别名。您对列表的理解速度更快、更清晰,浅层复制只是最简单的解决方法。非常感谢您的回答。[t for t in temp]
是一种相当冗长/缓慢的方式来表达temp[:]
。如果输入可能不是列表
,而输出必须是列表
,列表(someseq)
,则无操作列表总是比空片更好。非常感谢欢迎您
d= []
temp = [0,0,0]
for i in range(4):
tmp = [t for t in temp]
tmp[0] = i+1
d.append(tmp)