เมื่อคุณส่งผ่านlambda
ไปsort
คุณต้องส่งคืนจำนวนเต็มไม่ใช่บูลีน ดังนั้นรหัสของคุณควรอ่านดังนี้:
xs.sort(lambda x,y: cmp(len(x), len(y)))
โปรดทราบว่าcmpเป็นฟังก์ชั่นในตัวดังกล่าวว่าcmp(x, y)
ผลตอบแทน -1 ถ้าx
น้อยกว่าy
0 ถ้าx
มีค่าเท่ากับy
1 และถ้ามีค่ามากกว่าx
y
แน่นอนคุณสามารถใช้key
พารามิเตอร์แทน:
xs.sort(key=lambda s: len(s))
สิ่งนี้จะบอกsort
วิธีการสั่งซื้อโดยพิจารณาจากสิ่งที่ฟังก์ชันคีย์ส่งกลับ
แก้ไข: ขอบคุณ balpha และ Ruslan ด้านล่างที่ชี้ให้เห็นว่าคุณสามารถส่งผ่านlen
โดยตรงเป็นพารามิเตอร์หลักไปยังฟังก์ชันได้ดังนั้นจึงไม่จำเป็นต้องมีlambda
:
xs.sort(key=len)
และดังที่ Ruslan ชี้ให้เห็นด้านล่างคุณยังสามารถใช้ฟังก์ชันการเรียงลำดับในตัวแทนlist.sort
วิธีการซึ่งจะสร้างรายการใหม่แทนที่จะจัดเรียงรายการที่มีอยู่ในตำแหน่ง:
print(sorted(xs, key=len))
lambda
; แค่ใช้key = len