我对python中的回溯方法有疑问。我如何在python的递归中存储在不同调用中形成的变量和列表(临时),正如我们所知,一旦形成的幂堆栈被破坏,变量的值也会被破坏。 例如:
avc=[]
var=0
def func(li,n,sumo,li2):
if sumo==n:
global var
var+=1
#print(li2) ##line x
adg(li2)
return
elif sumo>n:
return
else:
for i in range(0,len(li)):
li2.append(li[i])
sumo=sum(li2)
func(li,n,sumo,li2)
li2.remove(li[i])
def adg(li3):
global avc
avc.append(li3)
#print("avc",avc)
if __name__=="__main__" :
liq=list(map(int,input().strip().split()))
n=liq[0]
li=list(map(int,input().strip().split()))
func(li,n,0,[])
sumo=0
count=0
lis=[]
j=0
print(avc)
现在在第x行,它会打印列表,但当我在程序末尾打印avc时,它会打印空列表。我希望元素附加到avc。 请帮忙
你应该改变
到
这是因为avc持有对li3的引用,并且
您还可以从li3中删除项目,因为您将li2传递给adg,在adg中它被称为li3
通过在li3上调用.copy(),您将得到一个具有相同元素的新列表,因此当您更改li2(或li3)时,复制的列表不会更改
相关问题 更多 >
编程相关推荐