【问题标题】:How to write all_subsets function using recursion?如何使用递归编写 all_subsets 函数?
【发布时间】: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


【解决方案1】:

这应该可行:

def all_subsets(b):
    if len(b)==1:
        return [[], b]  # if set has 1 element then it has only 2 substets
    else:
       s = all_subsets(b[:-1])  # calculate subsets of set without last element
       # and compose remaining subsets
       return sorted(s + [e + [b[-1]] for e in s], key=len)  # you can omit sorting if you want

【讨论】:

  • 这将极大地帮助我改进递归编码。你是最棒的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2019-10-02
相关资源
最近更新 更多