gpt4 book ai didi

python - 存储递归函数的输出

转载 作者:行者123 更新时间:2023-12-05 06:24:15 25 4
gpt4 key购买 nike

我编写了一个递归函数来获取给定列表的所有可能组合。下面是代码。

它接受一个列表参数并打印所有可能的组合。

def getCombinations(a):
a2 = []
ans = ['' for i in range(len(a))]
helper(a,ans,0)

def helper(a,ans,i):
if i == len(ans):
print (ans)
else:
ans[i] = ''
helper(a,ans,i+1)
ans[i] = a[i]
helper(a,ans,i+1)

所以如果我们调用 getCombinations([1,2,3]),它会打印如下:

['', '', '']
['', '', 3]
['', 2, '']
['', 2, 3]
[1, '', '']
[1, '', 3]
[1, 2, '']
[1, 2, 3]

我的问题是如何将上述结果存储在列表中。我试图寻找解决方案,我知道问题是函数在技术上不返回任何东西,但即使我尝试用 print(...) 替换 return它没有按预期工作并且不返回任何内容。

最佳答案

有很多方法可以做到这一点,但从您的代码开始,将您的函数变成一个生成器可能是最简单的。

生成器不会一次返回整个结果,而是返回可用的每个元素。这样,您就可以替换您的 printyield并通过包装对 helper(a,ans,0) 的调用将所有内容收集在一个列表中在list() .

但是,由于您的代码修改了现有答案,因此您需要收集列表的副本,而不是列表本身,因为这会在以后的迭代中发生变化。

所以:

from copy import copy

def getCombinations(a):
ans = ['' for i in range(len(a))]
return list(helper(a,ans,0))

def helper(a,ans,i):
if i == len(ans):
yield copy(ans)
else:
ans[i] = ''
yield from helper(a,ans,i+1)
ans[i] = a[i]
yield from helper(a,ans,i+1)

print(getCombinations([1,2,3]))

虽然这是一种非常复杂的方法,而且空字符串非常困惑 - 为什么不使用标准库:

from itertools import combinations
print([c for n in range(4) for c in combinations([1, 2, 3], n)])

或者,更一般地,对于任何列表:

from itertools import combinations
def all_combinations(a):
return([c for n in range(len(a)+1) for c in combinations(a, n)])
print(all_combinations([1, 2, 3]))

关于python - 存储递归函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57798655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com