Vous avez de bonnes chances d'apprendre à apprécier la transmission de paramètres de mots-clés grâce à cette expérience.
Tony Veijalainen le
1
C'est très ancien, mais avez-vous une idée de la raison pour laquelle le code d'erreur est trompeur? Votre réponse semble possible que Python fournisse lambdaun autre paramètre puisqu'une cmpfonction prend 2?
SuperBeasedMan
@SuperBiasMan l'erreur n'est pas trompeuse. cmp, une fonction de comparaison prend deux arguments. Si vous ne spécifiez pas que vous passez a key, il est supposé à partir de l'ordre des paramètres de fonction que vous passez un comparateur. Votre lambda prend un paramètre, n'est donc pas un comparateur valide et c'est ce que dit l'erreur.
Cela ne fonctionne pas pour les entiers de chaîne. Regarde ça! lst = [('999', '9'), ('303', '30'), ('343', '34')] lst.sort (clé = lambda x: x [1]) print (lst )
Daniel Kua
Le résultat est [('303', '30'), ('343', '34'), ('999', '9')] qui n'est pas trié en fonction du deuxième élément de chaque liste.
[('pomme', '303', '30'), ('bébé', '343', '34'), ('candy', '999', '9')]. Ce qui n'est pas trié sur la base de 2 éléments aussi!
Daniel Kua
8
Les listes Python ont deux méthodes intégrées pour trier les données:
sort()— A method that modifies the list in-place
sorted()— A built-in function that builds a new sorted list from an iterable
En fonction de vos besoins, vous pouvez choisir parmi ces deux:
si vous souhaitez conserver la liste d'origine, vous pouvez utiliser la fonction triée ou si vous n'avez pas besoin de la liste d'origine, vous pouvez utiliser la fonction de tri.
Avant de procéder au tri ou au tri, nous devons comprendre lambda.
Un lambda est une fonction anonyme et une fonction anonyme est une fonction qui est définie sans nom, ce post semble l'expliquer assez bien.
Les fonctions Lambda sont utiles pour les appels en ligne car elles n'ont qu'une seule expression qui est évaluée et renvoyée. Leur syntaxe pour un lambda est:
Réponses:
Utilisation
Sur Python 2.x, la
sorted
fonction prend ses arguments dans cet ordre:donc sans le
key=
, la fonction que vous transmettez sera considérée comme unecmp
fonction qui prend 2 arguments.la source
lambda
un autre paramètre puisqu'unecmp
fonction prend 2?cmp
, une fonction de comparaison prend deux arguments. Si vous ne spécifiez pas que vous passez akey
, il est supposé à partir de l'ordre des paramètres de fonction que vous passez un comparateur. Votre lambda prend un paramètre, n'est donc pas un comparateur valide et c'est ce que dit l'erreur.Il s'imprimera comme suit:
la source
Les listes Python ont deux méthodes intégrées pour trier les données:
En fonction de vos besoins, vous pouvez choisir parmi ces deux:
si vous souhaitez conserver la liste d'origine, vous pouvez utiliser la fonction triée ou si vous n'avez pas besoin de la liste d'origine, vous pouvez utiliser la fonction de tri.
Avant de procéder au tri ou au tri, nous devons comprendre lambda.
Un lambda est une fonction anonyme et une fonction anonyme est une fonction qui est définie sans nom, ce post semble l'expliquer assez bien.
https://www.programiz.com/python-programming/anonymous-function
Les fonctions Lambda sont utiles pour les appels en ligne car elles n'ont qu'une seule expression qui est évaluée et renvoyée. Leur syntaxe pour un lambda est:
arguments lambda: expression
voyons comment utiliser la fonction triée:
sortie: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Ici, nous pouvons voir que la liste student_tuples ayant des tuples est triée en fonction du paramètre clé à condition que student [2].
la source