値のセットの並べ替え[終了]


112

私はこのような値を持っています:

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

それぞれの値setを昇順でソートしたい。セット間で並べ替えるのではなく、各セットの値を並べ替えます。


3
タプルは問題とどのような関係があり、何を試しましたか?
Fred Foo

3
Pythonセットには順序付けの概念がないと思います。これはあなたを助けるかもしれない:stackoverflow.com/questions/1653970/...
zallarak

3
セットは無秩序です。それはそのプロパティの1つです。すべての言語で。を使用しlistます。
Karoly Horvath 2013

4
@KarolyHorvath "セットは順序がありません。それはそのプロパティの1つです。すべての言語で。" C ++のものstd::setを注文しました。
Timothy Shields

17
なぜ人々は事実の後でこの質問を閉じた(または話題から外した)のですか?はい、OPが私たちに彼からそれを釣り上げるのではなく、OPが彼の問題を説明した方がよかったでしょう。しかし、これを実行し、彼の質問を編集して一致させ、彼が回答を受け入れたので、近い投票がどのように意味をなすかわかりません。
abarnert 2013

回答:


218

コメントから:

各セットを並べ替えたい。

簡単だ。すべてのセットs(または他の反復可能なもの)の場合sorted(s)、の要素のリストをsソートされた順序で返します。

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

sortedあなたを与えているlist、ではありませんset。これは、数学ほとんどすべてのプログラミング言語の両方で、セットの全体のポイント*が順序付けされていないためです。セット{1, 2}{2, 1}は同じセットです。


おそらく、これらの要素を文字列としてソートするのではなく、数値としてソートする必要があります(つまり、4.918560000は10.277200999の前ではなく後になります)。

最善の解決策は、最初に文字列ではなく数値として数値を格納することです。しかし、そうでない場合は、key関数を使用する必要があります。

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

詳細については、公式ドキュメントのSorting HOWTOを参照してください。


*例外についてはコメントを参照してください。


1
@TimothyShields:そうですね、私は「一般的な用語を誤用したくないプログラミング言語はすべて」と言っておくべきでした。「非変更」が「変更」を意味する言語でsetは、「ソートされたリスト」を意味することは当然のことであり、unordered_set「セット」を意味するように言う必要があります…
abarnert

2
その名前が良いか悪いかは、議論の対象ではありません。「セットはどの言語でも順序付けられない」という記述は誤りです。
Timothy Shields

5
数学セットに関するウィキペディアのページで「順序なし」という単語は見つかりません。また、「ordered」という単語は見つかりません。これは、セットの数学演算とは無関係だからです。特定の言語がセットの順序付けを選択するかどうかは、実装の詳細です。en.wikipedia.org/wiki/Set_(mathematics)
ティモシー・シールズ

3
@TimothyShields:一方、リンクしたセット(数学)のウィキペディアページには、定義からすでに明らかであるため、「順序付けなし」という単語はありません。特に、「セットAとBが等しいのは、それらが正確に同じ要素を持っている場合だけです」。これは、順序付けられたコレクションには当てはまりません。(「セットまたはマルチセットの要素がリストされている順序は
重要で

3
@TimothyShields:しかしstd::set (だけでなく、APIを介して明白な方法で、注文機能は、実際に発注を露出するタイプの一部任意のセットの)。要素が常に厳密な弱い順序でソートされたままであるという事実は、概念のまさに定義の一部です。だから、あなたの議論は愚かです。しかし、そうでなかったとしても、なぜそれが問題になるのでしょうか?数学と同じように、セットはほとんどすべてのプログラミング言語で順序付けされていません。単語を使用して別のことを意味する遠方の言語が1つあるという事実は、その陳述を真実にしないものではありません。
abarnert 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.