リスト内の要素の可能なすべての組み合わせを生成するという問題は、多くのプログラマを悩ませてきました。 itertools.combinations() のようなメソッドを使用すると、特定の長さのサブセットを簡単に取得できます。しかし、1 要素の組み合わせからセット全体に至るまで、考えられるすべてのサブセット サイズを反復処理したい場合はどうすればよいでしょうか?
確かに、整数のバイナリ表現は 1 つのアプローチを提供しますが、より効率的な方法を見つけてみましょう。
強力な itertools.chain() 関数を紹介します。この関数は、一連のイテレータを単一の拡張イテレータにシームレスに結合します。これにより、考えられるすべての長さのサブセットを生成するジェネレーターのチェーンを生成できます。
ここでは、itertools.chain() と Combinations() を使用した簡潔な実装を示します。
from itertools import chain, combinations def all_subsets(ss): return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1)))
必要はありません。複雑なインデックス作成やバイナリ デコードに苦労します。リスト上で all_subsets() を呼び出すだけで、考えられるすべての要素の組み合わせを表すタプルのチェーンが簡単に返されます。
たとえば、リスト [1, 2, 3] について考えてみましょう。私たちのコードは次の結果をもたらします:
() (1,) (2,) (3,) (1, 2) (1, 3) (2, 3) (1, 2, 3)
空のサブセットから完全なセットまですべてのベースをカバーするこの多用途のアプローチは、リストの要素の考えられるすべての組み合わせを列挙するという問題をエレガントに解決します。
以上がPython でリストの考えられるすべてのサブセットを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。