When you pass a lambda
to sort
, you need to return an integer, not a boolean. So your code should instead read
xs.sort(lambda x,y: cmp(len(x), len(y))
Note that cmp is a builtin function such that cmp(x, y)
returns -1 if x
is less than y
, 0 if x
is equal to y
, and 1 if x
is greater than y
.
Of course, you can instead use the key
parameter:
xs.sort(key = lambda s: len(s))
This tells the sort
method to order based on whatever the key function returns.
EDIT: Thanks to balpha and Ruslan below for pointing out that you can just pass len
directory as the key parameter, thus eliminating the need for a lambda
:
xs.sort(key = len)
And as Ruslan points out below, you can also use the built-in sorted function rather than the list.sort
method, which creates a new list rather than sorting the existing one in-place:
print sorted(xs, key=len)