web-dev-qa-db-ja.com

2D配列の順序付けられていない重複を削除する最も時間効率の良い方法は何ですか?

itertoolsを使用して組み合わせのリストを生成しました。次のような結果が得られます。

nums = [-5,5,4,-3,0,0,4,-2]
x = [x for x in set(itertools.combinations(nums, 4)) if sum(x)==target]
>>> x = [(-5, 5, 0, 4), (-5, 5, 4, 0), (5, 4, -3, -2), (5, -3, 4, -2)]

x[0]x[1]など、順序付けられていない重複を削除する最も時間の節約となる効率的な方法は重複です。これを処理するために組み込まれているものはありますか?

私の一般的なアプローチは、すべての要素のカウンターを1つに作成し、次のものと比較することです。これが最善のアプローチでしょうか?

ご指導ありがとうございます。

7
Safder

itertools.combinations_with_replacement() を使用できます。

戻り値r入力からの要素の長さサブシーケンスiterable個々の要素が複数回繰り返す。

組み合わせは辞書式ソート順で出力されます。したがって、入力iterableがソートされている場合、組み合わせタプルはソートされた順序で生成されます。

要素は、値ではなく位置に基づいて一意として扱われます。したがって、入力要素が一意の場合、生成される組み合わせも一意になります。

出典: Python Docs

0
AjitZero