在一条线上将数字按升序排序

时间:2013-06-04 13:38:06

标签: python python-2.7

所以我在文件中有以下输出(数千行) input.txt中

2956:1 1076:1 4118:1 1378:1 2561:1 
1039:1 1662:1
1948:1 894:1 1797:1 1662:1

问题是我需要让每一行按升序编号

期望的输出: output.txt的

1076:1 1378:1 2561:1 2956:1 4118:1
1039:1 1662:1
894:1 1662:1 1797:1 1948:1

这对于实现它是一个真正的挑战,我正在寻找一个python函数来为我做这件事。这些行必须保持原样,但每行必须按升序排序(就像输出一样)。

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:11)

with open('input.txt') as f, open('output.txt', 'w') as out:
    for line in f:
        line = line.split()  #splits the line on whitespaces and returns a list
        #sort the list based on the integer value of the item on the left side of the `:`
        line.sort(key = lambda x: int(x.split(':')[0]))
        out.write(" ".join(line) + '\n')

<强>输出:

1076:1 1378:1 2561:1 2956:1 4118:1
1039:1 1662:1
894:1 1662:1 1797:1 1948:1

答案 1 :(得分:2)

不确定python,但总的来说,我将每一行作为&#34;记录&#34;那么&#34;爆炸&#34;将行放入由空格分隔的数组(或正则表达式,一组空格或制表符,或任何分隔符),然后是一个简单的数组排序,然后&#34; implode&#34;回到一个字符串。

我的&#34;报价&#34;等同于PHP函数。

答案 2 :(得分:1)

一种方法是这样的:

def sort_input(input_file):
  for line in input_file:
    nums = line.strip().split()
    nums.sort(key=lambda x: int(x.split(':')[0]))
    print ' '.join(nums)