2016-07-03 12 views
-3

私は4列のデータを持つファイルを持っており、最初の列でソートされた最終出力ファイルを用意したいと思います。データファイル(rough.dat)は次のようになります。複数列のファイル内の数値を並べ替える

1 2 4 9 
11 2 3 5 
6 5 7 4 
100 6 1 2 

私は最初の列でソートするために使用していたコードです:

with open('rough.dat','r') as f: 
    lines=[line.split() for line in f] 

a=sorted(lines, key=lambda x:x[0]) 
print a 

私は取得しています結果は奇妙である、と私は考えます私は何かばかげている!

[['1', '2', '4', '9'], ['100', '6', '1', '2'], ['11', '2', '3', '5'], ['6', '5', '7', '4']] 

あなたが最初の列のソートが昇順ごとに行われていないことを確認して、代わりに、「1」で始まる番号が優先されます! '1'の後の0、つまり100が11より優先されます。

答えて

0

文字列は(辞書順)辞書的に比較されます:キー機能にintに最初の項目を変換する

>>> '100' < '6' 
True 
>>> int('100') < int('6') 
False 

は何をしたいあなたを与えるだろう。

a = sorted(lines, key=lambda x: int(x[0])) 
0

整数は文字列ではないため、数字は文字通りソートされます。あなたのデータをロードしてから、2番目の軸に基づいて行をソートするには、np.loadtextを使用します。

import numpy as np 

array = np.loadtxt('rough.dat') 
array.sort(axis=1) 

print array 
[[ 1. 2. 4. 9.] 
[ 2. 3. 5. 11.] 
[ 4. 5. 6. 7.] 
[ 1. 2. 6. 100.]] 
関連する問題