サンプルコードで変更する可能性があることの1つはself.memberlist
、繰り返しなどの長い名前を使用する場合は、最初に短い名前にエイリアス (「割り当て」) する方が読みやすいことがよくあります。たとえば、長くて読みにくい代わりに:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
あなたはコーディングすることができます:
L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]
Python は参照によって動作するため、 L はコピーではなく とまったく同じオブジェクトを参照することに注意してくださいself.memberlist
(同様に、リストがどれだけ長くても割り当ては非常に高速です。とにかくコピーされないためです。それはただ 1 つです。もっと参考に)。
これ以上複雑にする必要はないと思いますが、もちろん (a, b の "通常の" インデックスの場合>=0
) のようないくつかの凝ったものは簡単に考えられるかもしれませんが:
def slicer(a, b):
return slice(a, b+cmp(b,a), b-a), slice(b, a+cmp(a,b), a-b)
back, forth = slicer(someindexA, someindexB)
self.memberlist[back] = self.memberlist[forth]
この種の「高度な」用途を理解することは、いい考えであり、有益な頭の体操であり、楽しいことだと思います。興味のある読者は、一般的なアイデアが明確になったら、それらの役割と、それら+cmp
がどのように機能するかに焦点を当てることをお勧めします。 3 つの可能性 (a>b、a<b、a==b) [[負のインデックスではありませんが、なぜでしょうか? これを修正するには、スライサーをどのように変更する必要がありますか?]]。しかし、本番コードでこのような手の込んだアプローチを使用することは、一般的にやり過ぎであり、まったく不当であり、単純で単純なアプローチよりも保守が難しくなります。
シンプルは複雑よりも優れていることを忘れないでください。