75 votes

Comment Python trie-t-il une liste de tuples?

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?

90voto

Vasil Points 11172

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.

10voto

zweiterlinde Points 5984

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 .

9voto

unwind Points 181987

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é.

0voto

m-sharp Points 4349

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 à).

0voto

Gern Blanston Points 5706

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X