Los lectores deben notar que la clave= método:
ut.sort(key=lambda x: x.count, reverse=True)
es muchas veces más rápido que agregar rica operadores de comparación para los objetos. Me sorprendió leer esto (página 485 de "Python en una cáscara de Nuez"). Se puede confirmar mediante la ejecución de pruebas sobre este pequeño programa:
#!/usr/bin/env python
import random
class C:
def __init__(self,count):
self.count = count
def __cmp__(self,other):
return cmp(self.count,other.count)
longList = [C(random.random()) for i in xrange(1000000)] #about 6.1 secs
longList2 = longList[:]
longList.sort() #about 52 - 6.1 = 46 secs
longList2.sort(key = lambda c: c.count) #about 9 - 6.1 = 3 secs
Mi, muy mínimo, las pruebas demuestran que el primer tipo es más de 10 veces más lento, pero el libro dice que es sólo de alrededor de 5 veces más lento en general. La razón por la que dicen que es debido a la elevada optimiza el tipo de algoritmo utilizado en python (timsort).
Aun asi, es muy raro que .sort(lambda) es más rápido que el viejo y simple .sort(). Espero que arreglar eso.