Python 如何附加到全局列表? candidates=[2,3,5] 候选项排序() 目标=8 ans=[] 温度=[] 开始=0 def回溯(临时、候选、剩余、开始): 全球ans 如果剩余
因此,当我尝试打印列表Python 如何附加到全局列表? candidates=[2,3,5] 候选项排序() 目标=8 ans=[] 温度=[] 开始=0 def回溯(临时、候选、剩余、开始): 全球ans 如果剩余,python,python-2.x,Python,Python 2.x,因此,当我尝试打印列表ans时,我得到[[]]-我无法将temp列表附加到全局列表ans。如何做到这一点?在Python中不能附加这样的列表。您可以像list=list1+list2那样追加。因此,代替ans.append(temp)您需要使用ans.append(temp[:])而不是ans.append(temp)来编写ans=ans+temp。 但是我还不知道为什么。.append()附加单个元素(可以是列表本身)。也许你想改用.extend()(或者+=)?对于ans,正确的值是多少?正
ans
时,我得到[[]]
-我无法将temp
列表附加到全局列表ans
。如何做到这一点?在Python中不能附加这样的列表。您可以像list=list1+list2
那样追加。因此,代替ans.append(temp)
您需要使用ans.append(temp[:])
而不是ans.append(temp)
来编写ans=ans+temp
。但是我还不知道为什么。
.append()
附加单个元素(可以是列表本身)。也许你想改用.extend()
(或者+=
)?对于ans
,正确的值是多少?正确的ans应该是[[2,2,2,2],[2,3,3],[3,5]]实际上我想要的是一个结构,它会在列表中附加一个列表,比如[[],[]],类似这样的东西。然后你可以做ans+=[temp]
Yes,因为这是一种递归情况,如果跟踪,您将看到局部变量temp
弹出值并插入未看到的值,并且如果temp不在ans:条件下,您无法将它们与此匹配。因此临时值变为空,在上一个场景中,您将向ans
添加一个emplytemp
列表,从而获得[[]]
。但是在值追加的情况下,if
条件确保在全局变量ans
中追加新值,并且它不会弹出任何内容,因此您得到[2,2,2,2,3,3,5]
candidates = [2,3,5]
candidates.sort()
target = 8
ans = []
temp = []
start = 0
def backtracking(temp,candidates,remaining,start):
global ans
if remaining < 0:
return
elif remaining == 0:
if temp not in ans:
ans.append(temp)
print ans,"ans"
else:
i = start
print i,"st"
while i < len(candidates):
temp.append(candidates[i])
print i,"i"
backtracking(temp,candidates,remaining-candidates[i],i)
temp.pop(len(temp) - 1)
i += 1
backtracking(temp,candidates,target,start)
print ans