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

19

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

是否有一种方法可以将相同的索引顺序应用于原始行列表?结果应该是原始行的排序列表。

示例:

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]

为什么要做额外的工作来找出索引,然后将它们应用回另一个列表,不如在排序之前将值配对起来(例如使用 zip)? - Karl Knechtel
4个回答

51
[listofLines[i] for i in sortedIndex]

11

我认为您可以这样做

[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)

3
sorted(zip(listofTimes, listofLines))

1
如果您想对原始列表进行排序,因为您在其他地方引用了它,那么您可以将排序后的列表分配给它:
my_list[:] = [my_list[i] for i in sorted_indexes]  # [:] is key!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接