如何在 python 中的递归调用中全局存储值
How to store values globally in recursive calls in 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 。
请帮忙
你应该改变
avc.append(li3)
到
avc.append(li3.copy())
那是因为 avc 持有对 li3 的引用,并且通过
li2.remove(li[i])
您也从 li3 中删除了项目,因为您将 li2 传递给了 adg,它称为 li3。
通过在 li3 上调用 .copy(),您会得到一个包含相同元素的新列表,因此当您更改 li2(或 li3)时,复制的列表不会改变。
我对 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.append(li3)
到
avc.append(li3.copy())
那是因为 avc 持有对 li3 的引用,并且通过
li2.remove(li[i])
您也从 li3 中删除了项目,因为您将 li2 传递给了 adg,它称为 li3。
通过在 li3 上调用 .copy(),您会得到一个包含相同元素的新列表,因此当您更改 li2(或 li3)时,复制的列表不会改变。