В Python я пытаюсь отсортировать по дате с помощью лямбды. Я не могу понять свое сообщение об ошибке. Сообщение:
<lambda>() takes exactly 1 argument (2 given)
У меня есть линия
a = sorted(a, lambda x: x.modified, reverse=True)
В Python я пытаюсь отсортировать по дате с помощью лямбды. Я не могу понять свое сообщение об ошибке. Сообщение:
<lambda>() takes exactly 1 argument (2 given)
У меня есть линия
a = sorted(a, lambda x: x.modified, reverse=True)
Ответы:
использование
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
На Python 2.x sorted
функция принимает аргументы в следующем порядке:
sorted(iterable, cmp=None, key=None, reverse=False)
так что без key=
функции, которую вы передаете, будет считаться cmp
функция, которая принимает 2 аргумента.
lambda
другой параметр, поскольку cmp
функция принимает 2?
cmp
Функция сравнения принимает два аргумента. Если вы не укажете, что передаете a key
, из порядка параметров функции предполагается, что вы передаете компаратор. Ваша лямбда принимает один параметр, поэтому не является допустимым компаратором, и именно об этом говорит ошибка.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Будет напечатано следующее:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
В списках Python есть два встроенных способа сортировки данных:
sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable
Исходя из ваших требований, вы можете выбрать один из этих двух:
если вы хотите сохранить оригинальный список, вы можете использовать сортированную функцию или, если вам не нужен оригинальный список, вы можете использовать функцию сортировки.
Прежде чем приступить к сортировке или сортировке, нам нужно понять лямбду.
Лямбда - это анонимная функция, а анонимная функция - это функция, которая определена без имени, этот пост, кажется, объясняет это довольно хорошо.
https://www.programiz.com/python-programming/anonymous-function
Лямбда-функции удобны для вызова in-line, потому что они имеют только одно выражение, которое вычисляется и возвращается. У них синтаксис для лямбды такой:
лямбда аргументы: выражение
давайте посмотрим, как использовать отсортированную функцию:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
вывод: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Здесь мы видим, что список student_tuples с кортежами отсортирован на основе ключевого параметра при условии, что student [2].