Lorsque vous passez un lambda
à sort
, vous devez renvoyer un entier et non un booléen. Donc, votre code devrait plutôt se lire comme suit:
xs.sort(lambda x,y: cmp(len(x), len(y)))
Notez que cmp est une fonction intégrée telle que cmp(x, y)
renvoie -1 si x
est inférieur à y
, 0 si x
est égal à y
et 1 si x
est supérieur à y
.
Bien sûr, vous pouvez utiliser à la place le key
paramètre:
xs.sort(key=lambda s: len(s))
Cela indique à la sort
méthode de commander en fonction de ce que la fonction clé renvoie.
EDIT: Merci à balpha et Ruslan ci-dessous pour avoir souligné que vous pouvez simplement passer len
directement comme paramètre clé à la fonction, éliminant ainsi le besoin d'un lambda
:
xs.sort(key=len)
Et comme Ruslan le souligne ci-dessous, vous pouvez également utiliser la fonction triée intégrée plutôt que la list.sort
méthode, qui crée une nouvelle liste plutôt que de trier l'existante sur place:
print(sorted(xs, key=len))
lambda
; il suffit d'utiliserkey = len