我写了一些函数来输出列表的排列,我提供了一个输入:[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)
您未返回任何内容
我为您纠正了
if len(tmp)==len(nums):
result.append(tmp)
print(result) ##here it shows correctly [[1]]
return result
哦,您正在使自己变得非常困难...
在dfs
内部,您像这样呼叫dfs
:
dfs(nums, visited, tmp, result)
然后,在第二次迭代中,您将tmp
像这样添加到result
:
result.append(tmp)
然后,一旦返回,您就可以从1
中删除tmp
:
tmp.pop()
将其从tmp
中删除,但是由于您也将列表tmp
添加到了result
,因此现在您已经将result
从[[1]]
更改为[[]]
-之后是tmp
全部。
您应该重新考虑这里到底需要什么。而且在Python中,像您正在做的那样按引用传递变量并修改其内容并不是一种很好的方法。尝试从功能上考虑它,而不依赖于副作用。