ホームページ >バックエンド開発 >Python チュートリアル >Python で数値リストの考えられるすべてのサブセットを効率的に生成するにはどうすればよいですか?

Python で数値リストの考えられるすべてのサブセットを効率的に生成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 14:43:47591ブラウズ

How Can I Efficiently Generate All Possible Subsets of a List of Numbers in 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 サイトの他の関連記事を参照してください。

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