Python でのセットの分割
当面のタスクは、指定された要素セットをすべての可能なサブセットに分割することです。たとえば、セット [1, 2, 3] を分割すると、次のサブセットが得られます。
[[1], [2], [3]] [[1,2], [3]] [[1], [2,3]] [[1,3], [2]] [[1,2,3]]
再帰的解決策
この問題に対する 1 つのアプローチは再帰です。 n-1 個の要素のパーティションを指定すると、既存のサブセットの 1 つに n 番目の要素を含めるか、n 番目の要素のみを含む新しいシングルトン サブセットを作成することで、n 番目の要素のパーティションを作成するように拡張できます。
この再帰アルゴリズムは、出力の重複や外部ライブラリへの不要な依存関係を回避しながら、入力セットを効果的に分割します:
<code class="python">def partition(collection): if len(collection) == 1: yield [ collection ] return first = collection[0] for smaller in partition(collection[1:]): # insert `first` in each of the subpartition's subsets for n, subset in enumerate(smaller): yield smaller[:n] + [[ first ] + subset] + smaller[n+1:] # put `first` in its own subset yield [ [ first ] ] + smaller something = list(range(1,5)) for n, p in enumerate(partition(something), 1): print(n, sorted(p))</code>
以上がPython でセットを可能なすべてのサブセットに分割するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。