ホームページ >バックエンド開発 >Python チュートリアル >Python で数値リストの考えられるすべてのサブセットを効率的に生成するにはどうすればよいですか?
数値のリストから可能なすべての組み合わせを取得する
このタスクは、リストの要素の可能なすべての組み合わせ (2^N) を取得することです。
ブルートフォースアプローチ
考えられるアプローチの 1 つは、10 進整数 1 ~ 32768 をループし、それらのバイナリ表現をフィルターとして使用して、対応するリスト要素を選択することです。ただし、この方法の時間計算量は O(32768) であり、大規模なリストの場合は非効率的になる可能性があります。
最適化されたソリューション
より効率的なソリューションは、 itertools ライブラリ。次のコードは、Python でリスト要素の可能なすべての組み合わせを生成します。
import itertools stuff = [1, 2, 3] combinations = list(itertools.chain(*map(lambda x: itertools.combinations(stuff, x), range(0, len(stuff)+1)))) for subset in combinations: print(subset)
このコードは、空のセットと元のリスト自体を含む、指定されたリストのすべてのサブセットを生成します。これは、長さ「L」ごとにすべての可能な組み合わせを生成するジェネレーターを作成し、chain() 関数を使用してすべてのジェネレーターを 1 つの反復可能オブジェクトに連結することによって行われます。
以上がPython で数値リストの考えられるすべてのサブセットを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。