比較したいものの配列/リストがあるとします。私がよく知っている言語では、次のようなことをします
for (int i = 0, i < mylist.size(); i++)
for (int j = i + 1, j < mylist.size(); j++)
compare(mylist[i], mylist[j])
これにより、各ペアを 1 回だけ比較することが保証されます。コンテキストによっては、リストに含まれる一連のオブジェクトに対して衝突検出を行っています。衝突が検出されるたびに、衝突を説明する小さな「衝突」オブジェクトがリストに追加され、別のルーチンが各衝突の解決をループします (衝突する 2 つのオブジェクトの性質によって異なります)。明らかに、私は各衝突を 1 回だけ報告したいと考えています。
さて、Python はインデックスをループするよりもイテレータを使用することを好むので、これを行う pythonic の方法は何ですか?
次の(バグのある)コードがありました:
for this in mylist:
for that in mylist:
compare(this, that)
しかし、これは明らかに各衝突を 2 回検出するため、衝突を解決しようとすると奇妙な動作が発生します。では、ここでのPythonicソリューションは何ですか?