Python对多列文件中的数字进行排序[重复]

Posted

技术标签:

【中文标题】Python对多列文件中的数字进行排序[重复]【英文标题】:Python sorting numbers in a multicolumn file [duplicate] 【发布时间】:2016-11-05 06:53:12 【问题描述】:

我有一个包含 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']]

您可能会看到第一列排序不是按升序排序,而是以'one'开头的数字优先! “一”之后的零,即 100 优先于 11!

【问题讨论】:

【参考方案1】:

字符串按字典顺序进行比较(字典顺序):

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

在 key 函数中将第一项转换为int 会给你想要的。

a = sorted(lines, key=lambda x: int(x[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.]]

【讨论】:

以上是关于Python对多列文件中的数字进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 对 CSV 文件的多列进行排序?

对 WPF 数据网格中的多列进行排序

基于多个列对包含numpy文本数组中的数字的列进行排序

按多列对数据视图中的结果集进行排序

如何对具有多列的表中的数据进行分组[重复]

python:按子列表中的项目对列表列表进行排序[重复]