我试图在每次当前更改时将当前追加到 master 中。我使用列表失败。我已经能够修改字符串并 append 不同的字符串来掌握,但如果我可以使用列表,那就容易多了。
master = []
def recur(count,current):
count = count + 1
if (count == 5):
return
current.append(1)
master.append(current)
recur(count,current)
recur(0,[])
print(master)
# out put
# [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
# what I expected
# [[1], [1,1], [1,1,1], [1,1,1,1]]
最佳答案
这就是你想要的:
master = []
def recur(count, current):
count += 1
if (count == 5):
return
new_current = current.copy()
new_current.append(1)
master.append(new_current)
recur(count, new_current)
recur(0, [])
print(master)
问题是 current
是对列表对象的引用...而不是实际的列表本身。因此,当您将 current
append 到 master
时,您只是 append 了对同一列表对象的引用。因此,当您将新元素添加到 current
列表时,它会添加到所有引用都指向的一个列表中。
解决方案是采用copy current
列表来存储当时的状态。 copy 有不同类型- 深和浅。浅拷贝将复制列表对象,但不会复制其元素,如果您有一个列表列表,则深复制将递归遍历元素和任何子元素。
关于python递归追加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59802542/