Khi bạn chuyển một lambda
đến sort
, bạn cần trả về một số nguyên, không phải boolean. Vì vậy, mã của bạn thay vào đó nên đọc như sau:
xs.sort(lambda x,y: cmp(len(x), len(y)))
Lưu ý rằng cmp là một hàm nội trang cmp(x, y)
trả về -1 nếu x
nhỏ hơn y
, 0 nếu x
bằng y
và 1 nếu x
lớn hơn y
.
Tất nhiên, thay vào đó bạn có thể sử dụng key
tham số:
xs.sort(key=lambda s: len(s))
Điều này cho biết sort
phương thức sắp xếp thứ tự dựa trên bất kỳ thứ gì mà hàm khóa trả về.
CHỈNH SỬA: Cảm ơn balpha và Ruslan bên dưới đã chỉ ra rằng bạn chỉ có thể truyền len
trực tiếp làm tham số chính cho hàm, do đó loại bỏ sự cần thiết phải có lambda
:
xs.sort(key=len)
Và như Ruslan chỉ ra bên dưới, bạn cũng có thể sử dụng hàm sắp xếp được tích hợp sẵn thay vì list.sort
phương pháp tạo danh sách mới thay vì sắp xếp danh sách hiện có tại chỗ:
print(sorted(xs, key=len))
lambda
; chỉ cần sử dụngkey = len