2014-09-29 92 views
-3

我已经输出结构如下:多行排序输出 - 蟒蛇

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 
+0

如何生成此输出?你能分享你的代码吗? – 2014-09-29 04:47:57

+0

已编辑,它已从文本文件中绘制。注意我知道如何在整行上排序,而不是跨越多行。 – 2014-09-29 04:52:31

+0

当你说:“我知道如何对整行进行排序,而不是跨越多行”,那么你的意思是你可以先排序但不排第二行? – 2014-09-29 04:54:46

回答

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))]) 
0

首先,你需要输入存储在一个2维数组的形式:

>>> 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']] 
0

与Python你可以用“大于和比较String类型/或不是” < || > 考虑到位,从AZ或AZ字母n-1字符将成为百达的LESS THAN性格n,所以我觉得应该用数字也作为Strings这么少:

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]