所有子集的集合

时间:2012-02-24 22:25:10

标签: python

在Python2中,我可以使用

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

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

对Python3来说,同样简洁的重写是什么?

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:5)

函数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