En Python, j'essaye de trier par date avec lambda. Je ne peux pas comprendre 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)
Utilisation
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Sur Python 2.x, la fonction sorted
prend ses arguments dans cet ordre:
sorted(iterable, cmp=None, key=None, reverse=False)
ainsi, sans le key=
, la fonction que vous transmettez sera considérée comme une fonction cmp
prenant 2 arguments.
lst = [('candy','30','100'), ('Apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Il sera imprimé 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 trier ou de trier, nous devons comprendre le 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 pratiques pour appeler en ligne car elles ne possèdent qu'une seule expression évaluée et renvoyée. La syntaxe pour un lambda est la suivante:
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 sur la base du paramètre clé fourni, à savoir student [2].