我今天有一个实验室,要从任意大小的集合中制作一个电源组,但我似乎想不出最好的方法。班上没有人以前学过 Python。只做过java
问问题
159 次
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 回答