跨多行排序输出 - python

时间:2014-09-29 04:39:54

标签: python sorting

我的输出结构如下:

0 2
4 1
0 3
5 4
3 2

来自代码:

 for entry in file:
    a = entry.replace('\n',"")
    b = a.replace(','," ")
    b = b.split(" ")
    print b

我想知道是否有办法在多行中排序(从最小到最大)输出,以便按如下方式接收输出:

0 2
0 3
1 4
2 3
4 5

3 个答案:

答案 0 :(得分:0)

假设“f”包含您在上面显示的文件,这就完成了工作

from operator import itemgetter
with open("f") as f:
    pairs = [line.split(" ") for line in f.readlines()]
    asc_pairs = [(min([int(x),int(y)]), max([int(x), int(y)])) 
            for x,y in pairs]
    print "\n".join([" ".join([str(l) for l in k]) 
        for k in sorted(asc_pairs, key=itemgetter(0,1))])

答案 1 :(得分:0)

首先,您需要以二维数组的形式存储输入:

>>> input_file = open('input.txt', 'r')
>>> lines = input_file.readlines()
>>> lines = map(lambda line : line.strip().split(" "), lines)
>>> lines 
[['0', '2'], ['4', '1'], ['0', '3'], ['5', '4'], ['3', '2']]

现在,您需要先对各行进行排序。

>>> lines = [sorted(line) for line in lines]

然后你可以使用sort()根据一个键对行进行排序,在这种情况下:第一个元素:

>>> lines.sort(key = lambda line : line[0])
>>> lines 
[['0', '2'], ['0', '3'], ['1', '4'], ['2', '3'], ['4', '5']]

答案 2 :(得分:0)

使用python,您可以将String类型与“大于和/或小于”< || >进行比较 如果n-1字符始终为LESS THAN个字符,那么{@ 1}}字符将始终为n字符,因此我认为它也应该与数字Strings一起使用,因此:< / p>

 for entry in file:
    a = entry.replace('\n',"")
    b = a.replace(','," ")
    b = b.split(" ")
    print  b[0] if b[-1] > b[0] else b[-1]