2010-07-15 67 views
5

我有从文件中读取的行列表。我需要按时间戳对列表进行排序。我使用正则表达式解析了时间戳,并将它们放入单独的列表中。这两个列表的索引将匹配。一旦我对时间戳列表进行排序,我就可以得到索引的顺序。按给定顺序的索引排序列表

有没有办法将相同的索引顺序应用到原始行列表中?结果应该是原始行的排序列表。

例子:

listofLines = ['log opened 16-Feb-2010 06:37:56 UTC', 
       '06:37:58 Custom parameters are in use', 
       'log closed 16-Feb-2010 05:26:47 UTC'] 
listofTimes = ['06:37:56', '06:37:58', '05:26:47'] 
sortedIndex = [2,0,1] 

回答

4

我觉得你可以做

[line for (time,line) in sorted(zip(listofTimes, listofLines))] 

但如果你有(或可写)功能可自动提取行时间,

def extract_time(line): 
    ... 
    return time 

你也可以做

listofLines.sort(key=extract_time) 

,或者如果你想保持原始列表不变,

sorted(listofLines, key=extract_time) 
2
sorted(zip(listofTimes, listofLines)) 
17
[listofLines[i] for i in sortedIndex] 
0

如果你想原始列表的其他地方进行排序,因为你,说,哈尔德对它的引用,您可以为其分配排序列表:

my_list[:] = [my_list[i] for i in sorted_indexes] # [:] is key!