2013-07-03 7 views
48

j'ai des valeurs comme ceci:Tri un ensemble de valeurs

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 de chaque set dans l'ordre croissant. Je ne veux pas trier entre les ensembles, mais les valeurs dans chaque ensemble.

+3

Qu'est-ce que les tuples ont à faire avec le problème et qu'avez-vous essayé? –

+3

Je ne pense pas que les ensembles python aient un concept de commande. Cela peut vous aider: http://stackoverflow.com/questions/1653970/does-python-have-an-ordered-set – zallarak

+2

un ensemble est sans ordre. c'est l'une de ses propriétés. dans toutes les langues. utilisez une 'liste'. –

Répondre

105

D'un commentaire:

Je veux trier chaque ensemble.

C'est facile. Pour tout ensemble s (ou toute autre chose itérable), sorted(s) renvoie une liste des éléments de s dans l'ordre de 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 est de vous donner un list, pas set. C'est parce que le point entier d'un ensemble, à la fois dans mathematics et dans almost every programming language, * est qu'il n'est pas commandé: les ensembles {1, 2} et {2, 1} sont le même ensemble.


Vous ne voulez probablement pas vraiment pour trier ces éléments comme des chaînes, mais comme des nombres (donc 4,918560000 viendra avant 10,277200999 plutôt qu'après).

La meilleure solution est la plus susceptible de stocker les nombres sous forme de nombres plutôt que de chaînes en premier lieu. Mais sinon, il vous suffit d'utiliser une fonction key:

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

Pour plus d'informations, consultez le Sorting HOWTO dans les documents officiels.


* Voir les commentaires pour les exceptions.

+0

"C'est parce que tout le point d'un ensemble, à la fois en mathématiques et dans tous les langages de programmation, est qu'il n'est pas ordonné" - std :: set C++ est ordonné. –

+1

@TimothyShields: Vous avez raison, j'aurais dû dire "chaque langage de programmation qui n'aime pas abuser des termes communs". Dans une langue où "non modifiable" signifie "mutant", il n'est pas surprenant que 'set' signifie" liste triée ", et vous devez dire' unordered_set' pour signifier "set" ... – abarnert

+1

Que ce nom soit bon ou mauvais isn 't quoi de neuf pour la discussion. L'affirmation selon laquelle "les ensembles ne sont jamais ordonnés dans aucune langue" est fausse. –

Questions connexes