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
添加一个emply
temp
列表,从而获得
[[]]
。但是在值追加的情况下,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