Sé que hay varias preguntas llamadas así, pero parece que no puedo obtener sus respuestas para trabajar.Ordenar lista de la lista con la función de comparación personalizada en Python
Tengo una lista de listas, 50 veces 5 elementos. Ahora quiero ordenar esta lista aplicando una función de comparación personalizada para cada elemento. Esta función calcula la aptitud de la lista por la cual se ordenarán los elementos. He creado dos funciones, comparar y fitness:
def compare(item1, item2):
return (fitness(item1) < fitness(item2))
y
def fitness(item):
return item[0]+item[1]+item[2]+item[3]+item[4]
Entonces traté de llamar por:
sorted(mylist, cmp=compare)
o
sorted(mylist, key=fitness)
o
sorted(mylist, cmp=compare, key=fitness)
o
sorted(mylist, cmp=lambda x,y: compare(x,y))
También probé list.sort() con los mismos parámetros. Pero en cualquier caso las funciones no obtienen una lista como argumento sino un None
. No tengo idea de por qué es, que proviene principalmente de C++, esto contradice cualquier idea de una función de devolución de llamada para mí. ¿Cómo puedo ordenar estas listas con una función personalizada?
Editar Encontré mi error. En la cadena que crea la lista original, una función no devolvió nada, pero se utilizó el valor de retorno. Lo siento por la molestia
Mostrar código, lo que espera y lo que se obtiene. – delnan
Tenga en cuenta que su función 'compare' es incorrecta, ya que solo devuelve True o False, y no distingue entre' item1' y 'item2' siendo igual y' item1' siendo mayor que 'item2'. La forma correcta de escribir 'compare' sería devolver' cmp (fitness (item1), fitness (item2)) '. Pero usar 'clave' es mejor. – jchl