У 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
Функції лямбда приємні для виклику в мережі, оскільки вони мають лише один вираз, який оцінюється та повертається. Синтаксис лямбда - це:
аргументи лямбда: вираз
давайте подивимося, як використовувати відсортовану функцію:
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, що мають кортежі, відсортований на основі ключового параметра за умови, що це студент [2].