Одна вещь, которую я мог бы изменить в вашем примере кода: если вы собираетесь использовать какое-то длинное имя, такое как 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
, а НЕ на копию (по тому же признаку, назначение выполняется очень быстро, независимо от длины списка, поскольку он не скопирован) в любом случае - это просто еще одна ссылка).
Я не думаю, что дальнейшие осложнения оправданы, хотя, конечно, некоторые причудливые могут быть легко придуманы, такие как (для 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
и как они заставляют вещи работать для трех возможностей (a> b, a
Помните, проще, чем сложнее !