Kiedy przekazujesz lambda
do sort
, musisz zwrócić liczbę całkowitą, a nie wartość logiczną. Więc zamiast tego twój kod powinien wyglądać następująco:
xs.sort(lambda x,y: cmp(len(x), len(y)))
Zauważ, że cmp jest funkcją wbudowaną, która cmp(x, y)
zwraca -1, jeśli x
jest mniejsze niż y
, 0, jeśli x
jest równe y
, i 1, jeśli x
jest większe niż y
.
Oczywiście możesz zamiast tego użyć key
parametru:
xs.sort(key=lambda s: len(s))
To mówi sort
metodzie, aby zamówić na podstawie tego, co zwraca funkcja klucza.
EDYCJA: Podziękowania dla balpha i Ruslana poniżej za wskazanie, że możesz po prostu przekazać len
bezpośrednio jako kluczowy parametr do funkcji, eliminując w ten sposób potrzebę lambda
:
xs.sort(key=len)
I jak Ruslan wskazuje poniżej, możesz również użyć wbudowanej funkcji sortowania zamiast list.sort
metody, która tworzy nową listę zamiast sortowania istniejącej na miejscu:
print(sorted(xs, key=len))
lambda
; po prostu użyjkey = len