置换码未提供正确的结果

问题描述 投票:1回答:2

我写了一些函数来输出列表的排列,我提供了一个输入:[1],应该输出[[1]],但是我的代码输出:[[]],我试图打印日志,看起来像在代码运行的中间,它确实打印了[[1]],但不确定为什么最后它会输出[[]]?以及如何解决?有人可以帮忙吗?非常感谢!


def permute(nums):
    result=[]
    visited=[False]*len(nums) 
    nums=sorted(nums)
    dfs(nums, visited, [], result)
    return result

def dfs(nums, visited, tmp, result):

    if len(tmp)==len(nums):
        result.append(tmp)
        print(result) ##here it shows correctly [[1]]
        return

    for i in range(len(nums)):
        if visited[i]:
            continue

        if i>0 and tmp[i]==tmp[i-1] and not visited[i-1]:
            continue

        tmp.append(nums[i])
        visited[i]=True
        dfs(nums, visited, tmp, result)
        visited[i]=False
        tmp.pop()


a=[1]
result=permute(a)
print("------")
print(result)
python algorithm permutation
2个回答
0
投票

您未返回任何内容

我为您纠正了

   if len(tmp)==len(nums):
        result.append(tmp)
        print(result) ##here it shows correctly [[1]]
        return result

0
投票

哦,您正在使自己变得非常困难...

dfs内部,您像这样呼叫dfs

dfs(nums, visited, tmp, result)

然后,在第二次迭代中,您将tmp像这样添加到result

result.append(tmp)

然后,一旦返回,您就可以从1中删除tmp

tmp.pop()

将其从tmp中删除,但是由于您也将列表tmp添加到了result,因此现在您已经将result[[1]]更改为[[]]-之后是tmp全部。

您应该重新考虑这里到底需要什么。而且在Python中,像您正在做的那样按引用传递变量并修改其内容并不是一种很好的方法。尝试从功能上考虑它,而不依赖于副作用。

© www.soinside.com 2019 - 2024. All rights reserved.