0

我今天有一个实验室,要从任意大小的集合中制作一个电源组,但我似乎想不出最好的方法。班上没有人以前学过 Python。只做过java

4

2 回答 2

3

有一个食谱itertools

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
于 2013-10-10T23:34:32.233 回答
0

洞察力是,对于幂集中的每个集合 S,原始集合的给定成员要么在 S 中,要么不在。由于这是一个二元决策,因此原始集合中的每个附加元素的幂集都会加倍。

powerset({a}) = {{}, {a}}

powerset({a,b}) = {{}, {a}, {b}, {a,b}}

powerset({a,b,c}) = union(
                       powerset({a,b}),
                       union({c}, X) where X in powerset({a,b})
                    )

这导致了一个很好的递归算法,只要任意不是太大,它就适用于“任意大小”的集合。

于 2013-10-10T23:45:30.190 回答