Sortieren einer Reihe von Werten [geschlossen]

111

Ich habe solche Werte:

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 möchte die Werte setin aufsteigender Reihenfolge sortieren . Ich möchte nicht zwischen den Sätzen sortieren, sondern die Werte in jedem Satz.

Justin Carrey
quelle
3
Was haben die Tupel mit dem Problem zu tun und was haben Sie versucht?
Fred Foo
3
Ich glaube nicht, dass Python-Sets ein Ordnungskonzept haben. Dies könnte Ihnen helfen: stackoverflow.com/questions/1653970/…
zallarak
3
Ein Set ist ordentlich. Das ist eine seiner Eigenschaften. in jeder Sprache. benutze a list.
Karoly Horvath
4
@KarolyHorvath "Ein Set ist ordentlich. Das ist eine seiner Eigenschaften. In jeder Sprache." C ++ std::setist bestellt.
Timothy Shields
17
Warum haben die Leute diese Frage nachträglich geschlossen (oder nicht zum Thema gemacht)? Ja, es wäre besser gewesen, wenn das OP sein Problem beschrieben hätte, als uns dazu zu bringen, es aus ihm heraus zu fischen. Aber jetzt, da wir das getan und seine Frage entsprechend bearbeitet haben und er eine Antwort akzeptiert hat, sehe ich nicht, wie die enge Abstimmung Sinn macht.
Abarnert

Antworten:

217

Aus einem Kommentar:

Ich möchte jeden Satz sortieren.

Das ist einfach. sGibt für jede Menge (oder alles andere iterierbare) sorted(s)eine Liste der Elemente sin sortierter Reihenfolge zurück:

>>> 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, sorteddass Sie ein list, nicht ein set. Das liegt daran, dass der springende Punkt einer Menge, sowohl in der Mathematik als auch in fast jeder Programmiersprache *, darin besteht, dass sie nicht geordnet ist: Die Mengen {1, 2}und {2, 1}die gleiche Menge.


Sie möchten diese Elemente wahrscheinlich nicht wirklich als Zeichenfolgen sortieren, sondern als Zahlen (also wird 4.918560000 vor 10.277200999 und nicht nachher kommen).

Die beste Lösung besteht darin, die Zahlen in erster Linie als Zahlen und nicht als Zeichenfolgen zu speichern. Wenn nicht, müssen Sie nur eine keyFunktion verwenden:

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

Weitere Informationen finden Sie im HOWTO zum Sortieren in den offiziellen Dokumenten.


* Ausnahmen finden Sie in den Kommentaren.

abarnert
quelle
1
@TimothyShields: Sie haben Recht, ich hätte sagen sollen "jede Programmiersprache, die gängige Begriffe nicht gerne missbraucht". In einer Sprache, in der "nicht modifizierend" "mutierend" bedeutet, ist es nicht überraschend, dass setdies "sortierte Liste" bedeutet, und Sie müssen sagen unordered_set, dass "gesetzt" bedeutet ...
abarnert
2
Ob dieser Name gut oder schlecht ist, steht nicht zur Diskussion. Die Aussage, dass "Mengen niemals in einer Sprache geordnet werden", ist falsch.
Timothy Shields
5
Sie werden das Wort "ungeordnet" auf der Wikipedia-Seite über eine mathematische Menge nicht finden. Sie werden auch das Wort "bestellt" nicht finden. Das liegt daran, dass es für mathematische Operationen an Mengen irrelevant ist . Ob eine bestimmte Sprache geordnete Sets erstellt, ist ein Implementierungsdetail. en.wikipedia.org/wiki/Set_(mathematics)
Timothy Shields
3
@TimothyShields: In der Zwischenzeit enthält die von Ihnen verknüpfte Wikipedia-Seite zu Set (Mathematik) nicht das Wort "ungeordnet", da dies bereits aus der Definition hervorgeht. Insbesondere "Mengen A und B sind genau dann gleich, wenn sie genau die gleichen Elemente haben". Dies gilt nicht für bestellte Sammlungen. (Es gibt auch Sätze wie: "Die Reihenfolge, in der die Elemente einer Menge oder eines Multisets aufgelistet werden, ist irrelevant". Wenn Sie also nur ein wenig anders gesucht hätten, hätten Sie sie auch ohne Verständnis des Konzepts finden können.)
abarnert
3
@TimothyShields: Zeigt std::set jedoch die Reihenfolge an (nicht nur auf offensichtliche Weise über die API; die Bestellfunktion ist tatsächlich Teil des Typs eines bestimmten Satzes). Die Tatsache, dass die Elemente immer nach einer streng schwachen Reihenfolge sortiert bleiben, ist Teil der eigentlichen Definition des Konzepts. Ihr Argument ist also umstritten. Aber selbst wenn es nicht so wäre, warum sollte es wichtig sein? Sets sind in fast jeder Programmiersprache ungeordnet, genau wie in Mathe. Die Tatsache, dass es eine abgelegene Sprache gibt, die das Wort verwendet, um etwas anderes zu bedeuten, macht diese Aussage nicht weniger wahr.
abarnert