【问题标题】:Python list sort in descending orderPython列表降序排序
【发布时间】:2011-05-10 04:04:48
【问题描述】:

如何按降序排列此列表?

timestamps = [
    "2010-04-20 10:07:30",
    "2010-04-20 10:07:38",
    "2010-04-20 10:07:52",
    "2010-04-20 10:08:22",
    "2010-04-20 10:08:22",
    "2010-04-20 10:09:46",
    "2010-04-20 10:10:37",
    "2010-04-20 10:10:58",
    "2010-04-20 10:11:50",
    "2010-04-20 10:12:13",
    "2010-04-20 10:12:13",
    "2010-04-20 10:25:38"
]

【问题讨论】:

    标签: python sorting reverse


    【解决方案1】:

    这将为您提供数组的排序版本。

    sorted(timestamps, reverse=True)
    

    如果你想就地排序:

    timestamps.sort(reverse=True)
    

    查看Sorting HOW TO的文档

    【讨论】:

    • reverse 是在 2.4 中添加的。但请注意,sort() 是稳定的,因此给出的两位代码不一定给出相同的结果。
    • @Rajeev - 不要忘记,只有以这种方式编写日期时才能对日期进行排序 (YYYY-MM-DD HH:MM:SS),其中字母顺序与时间顺序相同。 'DD.MM.YYYY' 就是一个很好的例子,你需要的不仅仅是sort(reverse=True)
    • print("排序前的列表");打印(我的列表); myList.sort(reverse = True); print("sortedList : " + str(myList));
    • @Erum 这是一个答案,而不是评论,作为一个答案,它是多余的。
    【解决方案2】:

    在一行中,使用lambda

    timestamps.sort(key=lambda x: time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6], reverse=True)
    

    将函数传递给list.sort

    def foo(x):
        return time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6]
    
    timestamps.sort(key=foo, reverse=True)
    

    【讨论】:

    • 不需要转换成时间元组。
    • @Marcelo:纯属巧合。
    • @IgnacioVazquez-Abrams 不,不是巧合。 ISO 8601 被明确设计成字母顺序与时间顺序一致。
    • @jwg 同意这种观点(这显然是设计使然,并非巧合),但给定的格式不符合 ISO 8601。
    • @jwg 日期和时间组件之间有一个空格。
    【解决方案3】:

    你可以这样做:

    timestamps.sort(reverse=True)
    

    【讨论】:

      【解决方案4】:

      你简单的类型:

      timestamps.sort()
      timestamps=timestamps[::-1]
      

      【讨论】:

      • 这是一个奇怪的答案,因为您在原地进行排序,然后在原地进行反转。如果有另一个变量为原始列表起别名,则其后的值将不会按原始顺序排列元素,也不会按降序排列;别名将指向按 升序 顺序排序的列表。这可能是相当令人惊讶的,也是微妙错误的来源。
      【解决方案5】:

      由于您的列表已经按升序排列,我们可以简单地反转列表。

      >>> timestamps.reverse()
      >>> timestamps
      ['2010-04-20 10:25:38', 
      '2010-04-20 10:12:13', 
      '2010-04-20 10:12:13', 
      '2010-04-20 10:11:50', 
      '2010-04-20 10:10:58', 
      '2010-04-20 10:10:37', 
      '2010-04-20 10:09:46', 
      '2010-04-20 10:08:22',
      '2010-04-20 10:08:22', 
      '2010-04-20 10:07:52', 
      '2010-04-20 10:07:38', 
      '2010-04-20 10:07:30']
      

      【讨论】:

        【解决方案6】:

        这是另一种方式

        
        timestamps.sort()
        timestamps.reverse()
        print(timestamps)
        

        【讨论】:

        • 从来不知道reverse(),超级有用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多