【发布时间】:2014-12-03 18:36:11
【问题描述】:
给定函数all_subsets(lst),我该如何使用递归来编写这个函数?
例如输入:[1,2,3],输出应为:[[], [1],[2],[3],[1,2],[1,3],[2,3][1,2,3]]
赋值是使用递归函数。请帮忙。这是实验作业的一部分,所以我没有为此评分,但与此同时,我很想学习如何编写这段代码,我不知道在我的实验班上有人知道。
到目前为止,我有:
def all_subsets(b):
if len(b) == 0:
return ''
else:
lst = []
subsets = all_subsets(b[1:])
for i in b:
lst.append([i])
for i in subsets:
if b[0] not in i:
lst.append([b[0]] + i)
for i in subsets:
if b[1] not in i:
lst.append([b[1]] + i)
return lst
它可以处理[1,2,3],但它不能处理更大的东西;加上这段代码也有奇怪的输出顺序
【问题讨论】:
-
请参阅stackoverflow.com/help/how-to-ask。所有要求代码的问题都需要显示提问者迄今为止在尝试自己解决问题方面所做的工作。之后,我们将非常乐意帮助您解决任何具体问题。
-
迭代可能比 Python 中的递归更惯用,这是生成器的一个很好的用例。
-
@Paulo:或者使用
itertools单行:itertools.chain.from_iterable(map(functools.partial(itertools.combinations, lst), range(len(lst)+1)))
标签: python function recursion subset