シーケンスをペアに分割し、それらを組み合わせて、組み合わせ内のすべての要素が一意になるようにする of 関数が必要です。Python の itertools を使用していくつかのアプローチを試みましたが、解決策が見つかりませんでした。
説明するために、次のシーケンスを取る関数が必要です: [1, 2, 3, 4]
次の 3 つの組み合わせに分割します。
[[1, 2], [3, 4]]
[[1, 3], [2, 4]]
[[1, 4], [2, 3]]
より長いシーケンスでも機能するはずですが、奇数の長さのシーケンスを処理する必要はありません。例えば。
[1,2,3,4,5,6]
次の 15 の組み合わせに分割されます。
[[1, 2], [3, 4], [5, 6]]
[[1, 2], [3, 5], [4, 6]]
[[1, 2], [3, 6], [4, 5]]
[[1, 3], [2, 4], [5, 6]]
[[1, 3], [2, 5], [4, 6]]
[[1, 3], [2, 6], [4, 5]]
[[1, 4], [2, 3], [5, 6]]
[[1, 4], [2, 5], [3, 6]]
[[1, 4], [2, 6], [3, 5]]
[[1, 5], [2, 3], [4, 6]]
[[1, 5], [2, 4], [3, 6]]
[[1, 5], [2, 6], [3, 4]]
[[1, 6], [2, 3], [4, 5]]
[[1, 6], [2, 4], [3, 5]]
[[1, 6], [2, 5], [3, 4]]
... 等々。
Maple と呼ばれる CAS には、この関数がsetpartitionという名前で実装されています。
編集:wksによって指摘された重大な深夜の入力エラーを修正し、出力を明確にしました。