Lorsque j'exécute ce code qui trie une liste code> code> de Il renvoie l'erreur suivante: que j'ai trouvé que c'est à cause de Quelqu'un peut-il vous éclairer pourquoi je reçois cette erreur? P> (str, int) code> tuples code>: P>
list.sort (clé = lambda x: (ABS (S - x [1]), X [1], LEN (x [0]), (255 - ORD (i) pour i in x [0]))) code> p>
TypeError: '<< non pris en charge entre les instances de "générateur" et "générateur" code> p> p>
(255 - ord (i) pour i in x [0]) code> qui trie les cordes dans l'ordre lexicographique inversé. P>
4 Réponses :
Si vous essayez EDIT: P> OK Je pense maintenant je comprends ce que tu veux faire. En fait, c'est une logique complexe, je ne vous suggère pas d'utiliser une expression de Lambda. Mais si vous voulez vraiment, veuillez le faire ci-dessous: p> Ceci signifie, vous construisez d'abord un tuple de 3 éléments, puis ajouté votre chaîne après caculée. P> p> Imprimer (type ((i pour i dans la plage (10)))) code>, vous pouvez voir en réalité une génératrice. Donc, la bonne façon de faire la même chose est de le convertir en tuple tuple (i pour i in gamme (10)) code> ou utilisez une liste de compréhensions [i car i car je in large (10)] Code>
Vous devez transmettre une fonction qui compare un seul élément de la liste, dans ce cas un élément tuple de mais vous pouvez laisser python faire la chose pour vous: p> < Pré> xxx pré> p> (str, int) code> afin que vous puissiez comparer un seul élément de chaîne avec un autre:
Je ne suis pas sûr d'avoir compris ce que vous essayez de réaliser avec ce code, peut-être que vous pouvez essayer ceci:
Cela résout le problème lorsque la chaîne a un seul caractère uniquement. Mais que si c'est un mot?
Essayez ceci:
fun = lambda x: (abs(s - x[1]), x[1], len(x[0]), [255 - ord(char) for char in x[0]]) y = sorted(lst, key = fun)
Pourquoi a-t-il fonctionné en ajoutant un support? Merci btw.
en utilisant ord code> ne trie pas dans l'ordre lexicographique. Il ressemble de près l'ordre lexicographique pour certaines langues dans certains cas, mais a de nombreuses particularités. Pour les démarrages, en anglais il trie B code> avant A code>. Si vous souhaitez qu'il soit réel de tri lexicographique, vous devez utiliser locale.strxfrm code> dans votre clé, avec votre paramètre local correctement défini. locale.setlocale (locale.lc_collate, '') code> est généralement suffisant pour vous assurer que votre paramètre local est réglé correctement pour le tri. [('MILA', 30), ('NICOLE', 30), ('LAUREN', 30)]
Pouvez-vous poster les données et la sortie attendue
@ komatiraju032 Les données sont comme ceci
[('Nicole', 30), ('Lauren', 6), ('Mila', 24)]] code> et il doit d'abord trier leint < / code> par sa proximité d'unint code>S code>, puis par ordre croissant deint code>, puis par la longueur dustr < / code>, puis finalement par son ordre lexicographique inversé.