【问题标题】:Sort list by given order of indices按给定的索引顺序对列表进行排序
【发布时间】:2011-03-16 16:23:06
【问题描述】:

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

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

例子:

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]

【问题讨论】:

    标签: python sorting list


    【解决方案1】:
    sorted(zip(listofTimes, listofLines))
    

    【讨论】:

      【解决方案2】:
      [listofLines[i] for i in sortedIndex]
      

      【讨论】:

        【解决方案3】:

        我觉得你可以的

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

        【讨论】:

          【解决方案4】:

          如果您想对原始列表进行排序,因为您在其他地方保存了对它的引用,您可以将排序后的列表分配给它:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-07-25
            • 2017-12-14
            • 1970-01-01
            • 2017-04-08
            • 2022-01-08
            • 2019-09-25
            • 1970-01-01
            相关资源
            最近更新 更多