サイズ n の配列を指定すると、配列内の r 要素の可能なすべての組み合わせを生成して出力します。例:
Input : arr[] = [1, 2, 3, 4], r = 2 Output : [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]>
推奨: あなたのアプローチを試してみてください {行きます} 解決策に進む前に、まず。
この問題には既存の再帰的解決策があります。「サイズ n の指定された配列内の r 要素の可能なすべての組み合わせを出力する」リンクを参照してください。この問題をPythonで解決します。 itertools.combinations() モジュール。
itertools.combinations() は何をしますか?
これは、入力反復可能オブジェクトから r 個の長さの要素のサブシーケンスを返します。組み合わせは辞書編集順に出力されます。したがって、入力反復可能オブジェクトがソートされている場合、結合タプルはソートされた順序で生成されます。
- itertools.combinations(iterable, r) : 繰り返される要素のない、ソートされた順序で r の長さのタプルを返します。たとえば、combinations('ABCD', 2) ==> [AB, AC, AD, BC, BD, CD]。 itertools.combinations_with_replacement(iterable, r) : 繰り返される要素を含む r の長さのタプルをソート順に返します。たとえば、combinations_with_replacement('ABCD', 2) ==> [AA、AB、AC、AD、BB、BC、BD、CC、CD、DD]。
Python3
# Function which returns subset or r length from n> from> itertools>import> combinations> def> rSubset(arr, r):> ># return list of all subsets of length r> ># to deal with duplicate subsets use> ># set(list(combinations(arr, r)))> >return> list>(combinations(arr, r))> # Driver Function> if> __name__>=>=> '__main__'>:> >arr>=> [>1>,>2>,>3>,>4>]> >r>=> 2> >print> (rSubset(arr, r))> |
>
>出力
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]>