ホームページ > バックエンド開発 > Python チュートリアル > Python で指定されたセットのすべてのサブセット (パワーセット) を効率的に生成するにはどうすればよいですか?

Python で指定されたセットのすべてのサブセット (パワーセット) を効率的に生成するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-04 02:15:11
オリジナル
620 人が閲覧しました

How Can I Efficiently Generate All Subsets (Powerset) of a Given Set in Python?

セットのすべてのサブセットの検索: パワーセット

要素のセットが与えられた場合、そのすべてのサブセットを見つけるのは一般的なプログラミング タスクになる可能性があります。これは、セットのパワーセットの構築として知られています。

itertools を使用したソリューション

Python itertools モジュールは、組み合わせを使用してパワーセットを計算するための洗練されたソリューションを提供します。

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))
ログイン後にコピー

どうやってWorks

この関数は、空のセットから完全なセットまで、セット内の要素のすべての組み合わせを生成します。これは、可能なサブセット サイズの範囲 (0 からセット内の要素の数まで) を反復し、各サイズの要素の組み合わせを作成することによって実現されます。

Example

たとえば、集合 {0, 1, 2, 3} のパワーセットは:

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')]
ログイン後にコピー

カスタマイズ

パワーセットから空のサブセットを除外したい場合は、powerset 関数の range ステートメントを range(1) に変更できます。 、レン(s) 1):

def powerset(iterable):
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1))
ログイン後にコピー

以上がPython で指定されたセットのすべてのサブセット (パワーセット) を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート