【问题标题】:Set of all subsets所有子集的集合
【发布时间】:2012-02-24 22:25:10
【问题描述】:

在 Python2 中我可以使用

def subsets(mySet):
    return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])

查找mySet 的所有子集。 Python 3 已删除 reduce

对于 Python3 的同样简洁的重写是什么?

【问题讨论】:

  • reduce() 仍然存在 -- 已移至 functools
  • @SvenMarnach:啊,谢谢。有非reduce()的版本吗?
  • 不完全是单行,但 itertools docs 有一个 powerset 实现。
  • 它不是写成 1-liner,但可以合并成一个:chain.from_iterable(combinations(list(iterable), r) for r in range(len(list(iterable))+1))
  • @AdamParkin:谢谢。 chain 来自哪里?

标签: python set subset


【解决方案1】:

这里是 Python 中幂集(所有子集的集合)算法的几种可能实现的list。有些是递归的,有些是迭代的,有些不使用reduce。多种选择!

【讨论】:

    【解决方案2】:

    函数reduce() 总是可以被for 循环替换。这是reduce()的Python实现:

    def reduce(function, iterable, start=None):
        iterator = iter(iterable)
        if start is None:
            start = next(iterator)
        for x in iterator:
            start = function(start, x)
        return start
    

    (相对于Python的内置版本reduce(),该版本不允许将None作为start参数传入。)

    使用您传递给reduce() 的参数对这段代码进行特殊处理

    def subsets(my_set):
        result = [[]]
        for x in my_set:
            result = result + [y + [x] for y in result]
        return result
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多