我有一个包含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']]
您可能会看到第一列排序没有按升序完成,而是以“一”开头的数字优先!! “一”之后为零,即100优先于11!
答案 0 :(得分:0)
字符串按字典顺序进行比较(字典顺序):
>>> '100' < '6'
True
>>> int('100') < int('6')
False
将关键功能中的第一项转换为int
将为您提供所需的内容。
a = sorted(lines, key=lambda x: int(x[0]))
答案 1 :(得分:0)
您正在对数字进行排序,因为它们是字符串而不是整数。作为一种更加简单的方式,您可以使用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.]]