ホームページ >バックエンド開発 >Python チュートリアル >与えられたセットのパワーセットを効率的に生成するにはどうすればよいでしょうか?

与えられたセットのパワーセットを効率的に生成するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-12-05 06:15:11568ブラウズ

How Can We Efficiently Generate the Powerset of a Given Set?

パワーセットの生成: エレガントなアプローチ

質問:
セットが与えられた場合、どうすれば効率的に計算できますかパワーセット。元のパワーセットのすべての可能なサブセットを包含します。 set?

答え:
Python の多用途 itertools モジュールは、以下に示すように、パワーセット生成のための優れたソリューションを提供します:

from itertools import chain, combinations

def powerset(iterable):
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
    

説明:

  • 「powerset」という名前のこの関数は、
  • コードは、0 から反復可能の長さに 1 を加えた値までの整数の範囲をトラバースします。
  • 整数ごとに、反復可能オブジェクトから要素の組み合わせを生成します。選択された要素は現在の整数と一致します。
  • itertools の「chain」関数が適用されます。これらの組み合わせを、パワーセットを表す単一の反復可能オブジェクトにマージします。

出力:
このパワーセット関数を要素「abcd」を含む反復可能オブジェクトに適用すると、続くpowerset:

[(), ('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')]

Customization:
出力内の最初の空のタプルが望ましくない場合は、1 から反復可能長までの範囲を使用するように range ステートメントを変更するだけです。プラス 1、空の組み合わせをパワーセットから効果的に除外します。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。