所有子集的集合

Ran*_*lue 13 python set subset

在Python2中,我可以使用

def subsets(mySet):
    return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]])
Run Code Online (Sandbox Code Playgroud)

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

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

Ósc*_*pez 14

以下是Python中功率集(所有子集的集合)算法的几种可能实现的列表.有些是递归的,有些是迭代的,有些是不使用的reduce.有很多选择可供选择!


Sve*_*ach 5

该函数reduce()始终可以通过for循环重新获得.这是一个Python实现reduce():

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
Run Code Online (Sandbox Code Playgroud)

(与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
Run Code Online (Sandbox Code Playgroud)