按给定的索引顺序对列表进行排序

时间:2010-07-15 21:58:23

标签: python sorting list

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

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

示例:

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 个答案:

答案 0 :(得分:21)

[listofLines[i] for i in sortedIndex]

答案 1 :(得分:5)

我认为你可以做到

[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 :(得分:2)

sorted(zip(listofTimes, listofLines))

答案 3 :(得分:0)

如果你想对原始列表进行排序,因为你可以在别处引用它,你可以为它分配排序列表:

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