1. ホーム
  2. python

[解決済み] 値の集合の並べ替え

2022-03-04 23:45:44

質問

このような値を持っています。

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 の順で表示されます。セット間のソートではなく、各セットの値をソートしたいのです。

どのように解決するのですか?

コメントから

<ブロッククオート

セットごとにソートしたいのですが。

それは簡単だ。任意のセットに対して 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']


詳しくは ソートHOWTO の公式ドキュメントの中にあります。


* 例外についてはコメントをご覧ください。