W Pythonie próbuję sortować według daty za pomocą lambda. Nie rozumiem komunikatu o błędzie. Wiadomość brzmi:
<lambda>() takes exactly 1 argument (2 given)
Linia, którą mam, to
a = sorted(a, lambda x: x.modified, reverse=True)
W Pythonie próbuję sortować według daty za pomocą lambda. Nie rozumiem komunikatu o błędzie. Wiadomość brzmi:
<lambda>() takes exactly 1 argument (2 given)
Linia, którą mam, to
a = sorted(a, lambda x: x.modified, reverse=True)
Odpowiedzi:
Posługiwać się
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
W Pythonie 2.x sorted
funkcja przyjmuje argumenty w następującej kolejności:
sorted(iterable, cmp=None, key=None, reverse=False)
więc bez tego key=
funkcja, którą przekazujesz, będzie uważana za cmp
funkcję, która przyjmuje 2 argumenty.
lambda
inny parametr, ponieważ cmp
funkcja zajmuje 2?
cmp
, funkcja komparatora przyjmuje dwa argumenty. Jeśli nie określisz, że przekazujesz a key
, zakłada się , że z kolejności parametrów funkcji przekazujesz komparator. Twoja lambda przyjmuje jeden parametr, dlatego nie jest prawidłowym komparatorem i tak mówi błąd.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Zostanie wydrukowane w następujący sposób:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
Listy Pythona mają dwa wbudowane sposoby sortowania danych:
sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable
W zależności od wymagań możesz wybrać jedną z dwóch:
jeśli chcesz zachować oryginalną listę, możesz użyć funkcji sortowania lub jeśli nie potrzebujesz oryginalnej listy, możesz użyć funkcji sortowania.
Zanim przejdziemy do sortowania lub sortowania, musimy zrozumieć lambdę.
Lambda to funkcja anonimowa, a funkcja anonimowa to funkcja zdefiniowana bez nazwy. Ten post wydaje się całkiem ładnie to wyjaśniać.
https://www.programiz.com/python-programming/anonymous-function
Funkcje lambda są przydatne do wywoływania in-line, ponieważ mają tylko jedno wyrażenie, które jest obliczane i zwracane. Składnia lambda to:
argumenty lambda: wyrażenie
zobaczmy, jak używać funkcji sortowanej:
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])
wyjście: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Tutaj widzimy, że lista student_tuples posiadająca krotki jest posortowana w oparciu o kluczowy parametr pod warunkiem, że student [2].