我如何 return 在 Python 中使用递归组合
How do I return Combinations using recursion in Python
我想打印列表中所有元素的组合。但是每次我的代码都会产生一个空列表列表。
想要的是input = [1,2,3]
Output = [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]
我得到的是 [[][][][][][][][]]
My Python code
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = []
curNums = []
def dfs(nums , i):
if i == len(nums):
result.append(curNums)
else:
curNums.append(nums[i])
dfs(nums , i+1)
curNums.pop()
dfs(nums , i+1)
dfs(nums , 0)
return result
您添加的 curNums
列表每次都是同一个列表 - 所以 append/pop 都是在同一个列表上创建的。
相反,每次您需要附加到结果的内容应该是列表的新副本 - 尝试 result.append(curNums[:])
。创建当前列表值的副本。
为什么不使用 https://docs.python.org/2/library/itertools.html#itertools.permutations 并创建每个子集长度的排列?像这样:
import itertools
input = [1,2,3]
results = []
for i in range(len(input)+1):
results.append(list(itertools.permutations(input,i)))
我想打印列表中所有元素的组合。但是每次我的代码都会产生一个空列表列表。
想要的是input = [1,2,3]
Output = [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]
我得到的是 [[][][][][][][][]]
My Python code
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = []
curNums = []
def dfs(nums , i):
if i == len(nums):
result.append(curNums)
else:
curNums.append(nums[i])
dfs(nums , i+1)
curNums.pop()
dfs(nums , i+1)
dfs(nums , 0)
return result
您添加的 curNums
列表每次都是同一个列表 - 所以 append/pop 都是在同一个列表上创建的。
相反,每次您需要附加到结果的内容应该是列表的新副本 - 尝试 result.append(curNums[:])
。创建当前列表值的副本。
为什么不使用 https://docs.python.org/2/library/itertools.html#itertools.permutations 并创建每个子集长度的排列?像这样:
import itertools
input = [1,2,3]
results = []
for i in range(len(input)+1):
results.append(list(itertools.permutations(input,i)))