Python中的 Append功能没有按预期工作



在下面的程序中,我试图添加所有的" new_列表";值放入my"fin_list"。但是append没有像预期的那样工作,而是用特定循环中的new_list"值覆盖它。

def all_subsequences(ind, a, new_list, fin_list):

if(ind >= len(a)):
print(new_list)
fin_list.append(new_list)
return

new_list.append(a[ind])
all_subsequences(ind+1, a, new_list, fin_list)
#new_list.remove(new_list[len(new_list)-1])
new_list.pop()
all_subsequences(ind+1, a, new_list, fin_list)

return fin_list

a = [3,1,2]
new_list = []
final_list = []
result = all_subsequences(0, a, new_list, final_list)
print(result)

这里每个级别的输出如下

[3 1 2], [3,1], [3 2], [3], [1,2], [1], [2], []

由于最后一个值是空列表,因此最后一个列表的最终值如下

[[], [], [], [], [], [], [], []]

链接到python沙盒:-

https://pythonsandbox.com/code/pythonsandbox_u21270_9PqNjYIsl7M85NGf4GBSLLrW_v0.py

我试图在基本条件内使用扩展而不是追加,但这不是我正在寻找的那种结果。我愿意接受任何解决这个问题的建议。

调用fin_list.append(new_list)时,附加了引用new_list复制到fin_list,而不是复制fin_list。因此,当您稍后执行new_list.pop()时,如果您打印fin_list,您会发现它也被更改了。

这种情况可以用下面的例子来说明:

foo = [1, 2, 3]
bar = []
bar.append(foo)
print(f"bar: {bar}")
# modify foo and you will find that bar is also modified
foo.append(4)
print(f"bar: {bar}")

解决这个问题的最简单的方法是使用fin_list.append(new_list[:]),它将复制new_list并将副本附加到fin_list

def all_subsequences(ind, a, new_list, fin_list):
if (ind >= len(a)):
print(new_list)
fin_list.append(new_list[:])
return
new_list.append(a[ind])
all_subsequences(ind+1, a, new_list, fin_list)
new_list.pop()
all_subsequences(ind+1, a, new_list, fin_list)
return fin_list

a = [3, 1, 2]
new_list = []
final_list = []
result = all_subsequences(0, a, new_list, final_list)
print(result)

最新更新