如何在python中的递归调用中全局存储值

2024-04-27 23:14:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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。 请帮忙


Tags: 列表returnifvardefliglobalfunc
1条回答
网友
1楼 · 发布于 2024-04-27 23:14:20

你应该改变

   avc.append(li3)

   avc.append(li3.copy())

这是因为avc持有对li3的引用,并且

 li2.remove(li[i])

您还可以从li3中删除项目,因为您将li2传递给adg,在adg中它被称为li3

通过在li3上调用.copy(),您将得到一个具有相同元素的新列表,因此当您更改li2(或li3)时,复制的列表不会更改

相关问题 更多 >