De façon empirique, il semble que le trieur de liste par défaut de Python, lorsqu'il reçoit une liste de nuplets, triera en fonction du premier élément de chaque tuple. Est-ce exact? Sinon, quelle est la bonne façon de trier une liste de n-uplets en fonction de leurs premiers éléments?
Réponses
Trop de publicités?Il trie automatiquement une liste de tuples par les premiers éléments dans les tuples, puis par les deuxièmes éléments et ainsi de suite, tuple ([1,2,3]) ira avant tuple ([1,2,4]). Si vous souhaitez remplacer ce comportement, transmettez un appelable comme second argument de la méthode de tri. Cet appelable doit renvoyer 1, -1, 0.
Oui, c'est la valeur par défaut. En fait, c'est la base du langage classique "DSU" (Decorate-Sort-Undecorate) en Python. Voir le code comme un pythoniste .
Non, les n-uplets sont des types de séquence, tout comme les chaînes. Ils sont triés de la même manière, en comparant chaque élément:
>>> import random
>>> sorted([(0,0,0,int(random.getrandbits(4))) for x in xrange(10)])
[(0, 0, 0, 0), (0, 0, 0, 4), (0, 0, 0, 5), (0, 0, 0, 7), (0, 0, 0, 8),
(0, 0, 0, 9), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 14)]
Les trois zéros ne sont là que pour montrer que quelque chose d'autre que le premier élément doit être inspecté.
Essayez d’utiliser la méthode de tri par liste interne et passez un lambda. Si votre premier élément de tuples est un entier, cela devrait fonctionner.
# l is the list of tuples
l.sort(lambda x,y: x-y)
Vous pouvez utiliser n’importe quel appelable pour la fonction de comparaison, pas nécessairement un lambda. Cependant, il doit renvoyer -1 (inférieur à), 0 (égal) ou 1 (supérieur à).
Découvrez "Devin Jeanpierre" réponse à cette question trier-un-dictionnaire-en-python-par-la-valeur où il dit d'utiliser un tuple et montre comment trier par la deuxième valeur