セットのすべてのサブセットを取得するにはどうすればいいですか? (powerset) [重複] 質問する

セットのすべてのサブセットを取得するにはどうすればいいですか? (powerset) [重複] 質問する

集合が与えられた場合

{0, 1, 2, 3}

サブセットを作成するにはどうすればよいでしょうか。

[set(),
 {0},
 {1},
 {2},
 {3},
 {0, 1},
 {0, 2},
 {0, 3},
 {1, 2},
 {1, 3},
 {2, 3},
 {0, 1, 2},
 {0, 1, 3},
 {0, 2, 3},
 {1, 2, 3},
 {0, 1, 2, 3}]

ベストアンサー1

パイソンitertoolsページまさにpowersetこれに対するレシピがあります:

from itertools import chain, combinations

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))

出力:

>>> list(powerset("abcd"))
[(), ('a',), ('b',), ('c',), ('d',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd'), ('a', 'b', 'c', 'd')]

先頭の空のタプルが気に入らない場合は、長さ 0 の組み合わせを回避するためにrangeステートメントを に変更するだけです。range(1, len(s)+1)

おすすめ記事