157 votes

Tri d'un ensemble de valeurs

J'ai des valeurs comme ça :

set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999'])  

Je veux trier les valeurs dans chaque set dans un ordre croissant. Je ne veux pas trier entre les ensembles, mais les valeurs de chaque ensemble.

297voto

abarnert Points 94246

D'après un commentaire :

Je veux trier chaque ensemble.

C'est facile. Pour tout ensemble s (ou tout autre itérable), sorted(s) renvoie une liste des éléments de s dans un ordre trié :

>>> s = set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
>>> sorted(s)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '10.277200999', '4.918560000']

Notez que sorted vous donne un list et non un set . C'est parce que le but d'un ensemble, à la fois dans mathématiques et en presque tous les langages de programmation ,* est qu'il n'est pas ordonné : les ensembles {1, 2} y {2, 1} sont le même ensemble.


Vous ne souhaitez probablement pas trier ces éléments en tant que chaînes de caractères, mais en tant que nombres (ainsi, 4,918560000 viendra avant 10,277200999 plutôt qu'après).

La meilleure solution consiste probablement à stocker les chiffres sous forme de nombres plutôt que de chaînes de caractères. Mais si ce n'est pas le cas, il suffit d'utiliser une balise key fonction :

>>> sorted(s, key=float)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '4.918560000', '10.277200999']

Pour plus d'informations, voir le Guide pratique du triage dans les documents officiels.


* Voir les commentaires pour les exceptions.

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