Je sais qu'il existe plusieurs questions de ce type, mais elles ne semblent pas fonctionner pour moi.
J'ai une liste de listes, 50 fois 5 éléments. Je souhaite trier cette liste en appliquant une fonction de comparaison personnalisée à chaque élément. Cette fonction calcule l'aptitude de la liste en fonction de laquelle les éléments doivent être triés. J'ai créé deux fonctions, compare et fitness :
def compare(item1, item2):
return (fitness(item1) < fitness(item2))
et
def fitness(item):
return item[0]+item[1]+item[2]+item[3]+item[4]
J'ai ensuite essayé de les appeler :
sorted(mylist, cmp=compare)
ou
sorted(mylist, key=fitness)
ou
sorted(mylist, cmp=compare, key=fitness)
ou
sorted(mylist, cmp=lambda x,y: compare(x,y))
J'ai également essayé list.sort() avec les mêmes paramètres. Mais dans tous les cas, les fonctions ne reçoivent pas une liste en argument, mais un fichier None
. Je n'ai aucune idée de la raison de cela, venant principalement du C++, cela contredit toute idée de fonction de rappel pour moi. Comment puis-je trier ces listes avec une fonction personnalisée ?
Editer J'ai trouvé mon erreur. Dans la chaîne qui crée la liste originale, une fonction n'a rien retourné mais la valeur de retour a été utilisée. Désolé pour le dérangement