[英]Appending Items by Iterating list
我设计了以下函数,该函数将列表作为参数并返回另一个列表。
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A)
return B
在此函数中,我假定该函数将根据A的当前状态将A追加到A。在该假设下工作。 我叫这个功能
>>> test([1,2,3,4,5])
预期输出为
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
但是,我得到的结果是
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
为什么是这样? 有没有解决这个问题的办法?
您需要按值复制它。 在当前情况下,您正在通过引用。 因此,每个索引都会随着A
变化而更新。 应该:
B.append(A[:])
请注意[:]
用于按值复制。
为了澄清, 在这里运行您的代码,我们可以检查在[1,2]
上调用function
的结果:
现在,考虑当我们制作副本时会发生什么:
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A[:])
return B
print function([1,2])
另外,作为一个补充说明:您应该更改变量的名称。 例如,通过将参数声明为list
可以隐藏list
方法。
您可以将A
的副本附加到B
以避免使用与A
相同的引用:
for num in list:
A.append(num)
B.append(A[:])
列表通过引用传递。 要复制它们,请使用语法B.append(A[:])
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A[:])
return B
在您的代码中,您发送引用而不是数据。
工作代码
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A[:])
return B
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.