En Python, j'essaye de trier par date avec lambda. Je ne comprends pas mon message d'erreur. Le message est:
<lambda>() takes exactly 1 argument (2 given)
La ligne que j'ai est
a = sorted(a, lambda x: x.modified, reverse=True)
En Python, j'essaye de trier par date avec lambda. Je ne comprends pas mon message d'erreur. Le message est:
<lambda>() takes exactly 1 argument (2 given)
La ligne que j'ai est
a = sorted(a, lambda x: x.modified, reverse=True)
Réponses:
Utilisation
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Sur Python 2.x, la sorted
fonction prend ses arguments dans cet ordre:
sorted(iterable, cmp=None, key=None, reverse=False)
donc sans le key=
, la fonction que vous transmettez sera considérée comme une cmp
fonction qui prend 2 arguments.
lambda
un autre paramètre puisqu'une cmp
fonction prend 2?
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.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Il s'imprimera comme suit:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
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.
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:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
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].