2011-09-07 17 views
0

これは愚かな質問のように聞こえるかもしれませんが、私はあまり成功していない答えを見つけようとしました。 - しかし、上記のようにASCII順で項目が表示されます - 彼らは、人間が読めるに浮くようにソートすることができ、私はソート機能を使用して、私のリストを繰り返してきました数値を浮動小数点数にソートする - アスキーオーダーではない - Pythonで

for v in sorted(list): 
    print v 


[885.1, 12824] 
[885.1, 19843] 
[885.11, 1319] 
[885.12, 1155] 
[885.13, 12844] 
[885.14, 33602] 
[885.15, 11324] 
[885.16, 44040] 
[885.2, 119283] 
[885.3, 8424] 

:私はリストのリストを持っています注文?すなわち:

[885.1, 19843] 
[885.2, 119283] 
[885.3, 8424] 
[885.11, 1319] 
[885.12, 1155] 
[885.13, 12844] 
[885.14, 33602] 
[885.15, 11324] 
[885.16, 44040] 

somekindのインデックスを作成する必要はありますか?浮動小数点をintに変換しますか?どんな助けでも大歓迎です。

David。

+7

885.16が885.2未満(0) – Feanor

+0

入力リストに885.1が最初に表示される_two_値があります。私はそれらをあなたの出力に現れるようにしたいと思いますよね?並べ替えの際に考慮する必要があります。 –

答えて

1

これは「ナット」(自然分類)と呼ばれます。私はそれに迅速なgoogleは:http://www.skynet.ie/~caolan/Packages/python-natsort.html(しかし、それを試みていない)。多分それがあなたを助けます。

ああ、それは必ずしもASCIIソートではないのですが、それが実軸

1

のようにあなたは比較関数を並べ替え与える必要がある、あなたが知っている、ちょうど番号順です。以下のような何か:。

sorted(list, cmp=lambda x, y: cmp(x[0], y[0])) 

はちょうどあなたが望むもののために必要な関数を記述し、それをプラグイン

はおそらく逆基数ソートのようなものをお勧めします。

3

最初の文字列にフロートを変換してそれを分割する "":

sorted(a, key=lambda x:map(int, str(float(x[0])).split("."))) 
1

これはハックのようなものですが、:

a = [ 
    [885.1, 19843], 
    [885.1, 12824], 
    [885.11, 1319], 
    [885.12, 1155], 
    [885.13, 12844], 
    [885.14, 33602], 
    [885.15, 11324], 
    [885.16, 44040], 
    [885.2, 119283], 
    [882.8, 8424], 
    [882.75, 8424], 
    [885.3, 8424] 
] 

for v in sorted(a, key=lambda t: str(t[0]).split(".")[0] + ("%05d" % int(str(t[0]).split(".")[1])) + "," + str(t[1])): 
    print v 

結果が

[882.8, 8424] 
[882.75, 8424] 
[885.1, 12824] 
[885.1, 19843] 
[885.2, 119283] 
[885.3, 8424] 
[885.11, 1319] 
[885.12, 1155] 
[885.13, 12844] 
[885.14, 33602] 
[885.15, 11324] 
[885.16, 44040] 

です免責事項:これは、小数点以下5桁以下を前提としています。それに従って調整してください。