Masz dużą szansę nauczyć się doceniać przekazywanie parametrów słów kluczowych z tego doświadczenia.
Tony Veijalainen
1
To jest bardzo stare, ale czy masz pojęcie, dlaczego kod błędu jest mylący? Twoja odpowiedź brzmi tak, jakby możliwe, że Python dostarcza lambdainny parametr, ponieważ cmpfunkcja zajmuje 2?
SuperBiasedMan
@SuperBiasedMan błąd nie wprowadza w błąd. 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.
Nie działa to w przypadku liczb całkowitych typu string. Sprawdź to! lst = [('999', '9'), ('303', '30'), ('343', '34')] lst.sort (klucz = lambda x: x [1]) print (lst )
Daniel Kua
Wynik to [(„303”, „30”), („343”, „34”), („999”, „9”)], które nie jest sortowane na podstawie drugiego elementu na każdej liście.
Odpowiedzi:
Posługiwać się
W Pythonie 2.x
sorted
funkcja przyjmuje argumenty w następującej kolejności:więc bez tego
key=
funkcja, którą przekazujesz, będzie uważana zacmp
funkcję, która przyjmuje 2 argumenty.źródło
lambda
inny parametr, ponieważcmp
funkcja zajmuje 2?cmp
, funkcja komparatora przyjmuje dwa argumenty. Jeśli nie określisz, że przekazujesz akey
, 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.Zostanie wydrukowane w następujący sposób:
źródło
Listy Pythona mają dwa wbudowane sposoby sortowania danych:
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:
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].
źródło