2013-07-03 17 views
48

Ich habe Werte wie folgt aus:Sortieren einer Reihe von Werten

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']) 

ich die Werte in jedem set in aufsteigender Reihenfolge sortieren möchten. Ich möchte nicht zwischen den Sätzen sortieren, sondern die Werte in jedem Satz.

+3

Was haben die Tupel mit dem Problem zu tun und was haben Sie versucht? –

+3

Ich glaube nicht, dass Python-Sets ein Ordnungskonzept haben. Dies könnte Ihnen helfen: http://StackOverflow.com/Questions/1653970/does-python-have-an-ordered-set – zallarak

+2

ein Set ist ohne Reihenfolge. das ist eine seiner Eigenschaften. in jeder Sprache. Verwende eine 'liste'. –

Antwort

105

Von einem Kommentar:

Ich will jeden Satz sortieren.

Das ist einfach. Für jede s gesetzt (oder irgendetwas anderes iterable), sorted(s) gibt eine Liste der Elemente von s in sortierter Reihenfolge:

>>> 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'] 

Beachten Sie, dass sorted Sie eine list schenkt, kein set. Das ist, weil der ganze Punkt eines Satzes, sowohl in mathematics als auch in almost every programming language, * ist, dass es nicht bestellt ist: die Sätze {1, 2} und {2, 1} sind der gleiche Satz.


Sie wahrscheinlich nicht wirklich wollen, diese Elemente als Strings sortieren, sondern als Zahlen (so wird 4,918560000 kommen vor 10,277200999 anstatt nach).

Die beste Lösung ist die Speicherung der Zahlen in erster Linie als Zahlen und nicht als Zeichenfolgen. Aber wenn nicht, brauchen Sie nur eine key Funktion zu verwenden:

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

Weitere Informationen finden Sie im Sorting HOWTO in den offiziellen Dokumenten sehen.


* Siehe die Kommentare für Ausnahmen.

+0

"Das ist, weil der ganze Punkt eines Satzes, sowohl in Mathematik als auch in jeder Programmiersprache, ist, dass es nicht bestellt ist" - C++ 's' std :: set' ist bestellt. –

+1

@TimothyShields: Sie haben Recht, ich hätte sagen sollen "jede Programmiersprache, die nicht gerne gemeinsame Begriffe missbraucht". In einer Sprache, in der "nicht modifizierend" "mutieren" bedeutet, ist es nicht verwunderlich, dass "set" "sortierte Liste" bedeutet und man sagen muss "unordered_set" bedeutet "set" ... – abarnert

+1

Ob dieser Name gut oder schlecht isn ist Was steht zur Diskussion? Die Aussage, dass "Mengen in keiner Sprache geordnet sind", ist falsch. –

Verwandte Themen