Python列表按降序排序

456

如何将此列表按降序排序?

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"
]
7个回答

564

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

sorted(timestamps, reverse=True)

如果您想原地排序:

timestamps.sort(reverse=True)

查看排序指南中的文档。


2
reverse 函数在 2.4 版本中被添加。但请注意,sort() 函数是稳定的,因此给出的两个代码片段不一定会产生相同的结果。 - Ignacio Vazquez-Abrams
6
@Rajeev-请注意,您只能按照这种方式编写日期(YYYY-MM-DD HH:MM:SS)进行排序,其中字母顺序和时间顺序相同。“DD.MM.YYYY”是一个很好的例子,您需要更多的内容来使用sort(reverse=True) - eumiro
print("排序前的列表"); print(myList); myList.sort(reverse = True); print("排序后的列表: " + str(myList)); - Erum
@Erum 这是一个答案,而不是评论,作为答案,它是多余的。 - Marcelo Cantos

427

使用一个 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)

19
转换为时间元组是不必要的。 - Marcelo Cantos
4
只是巧合。 - Ignacio Vazquez-Abrams
23
不是巧合。ISO 8601旨在确保字母顺序与时间顺序一致。 - jwg
2
@jwg 日期和时间组件之间有一个空格。 - Marcelo Cantos
1
@MarceloCantos 那个空格会影响顺序吗? - theonlygusti
显示剩余3条评论

66

你可以简单地这样做:

timestamps.sort(reverse=True)

13

您只需要简单地输入:

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

3
这个回答很奇怪,因为它是原地排序,但是却使用了非原地的逆序方法。如果有另一个变量与原始列表指向同一位置,在此操作后,该变量所对应的列表将不再是原始顺序或者按照降序排列,而是按照升序排列的。这可能会让人感到惊讶,并成为引发难以发现的bug的源头。 - kaya3

11

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

>>> 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']

5

这里有另一种方法


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

从来不知道reverse(),超级有用。 - Hamman Samuel

2

特别是当数据是数字时,否定可以用来按降序排序。如果您需要传递排序键,则这尤其有用。例如,如果数据如下:

data = ['9', '10', '3', '4.5']
sorted(data, reverse=True)                      # doesn't sort correctly
sorted(data, key=lambda x: -float(x))           # sorts correctly
#                          ^ negate here

# that said, passing a key along with reverse=True also work
sorted(data, key=float, reverse=True)           # ['10', '9', '4.5', '3']

举个与“datetime”相关的例子,它会像下面这样:

from datetime import datetime
ts = ["04/20/2010 10:07:30", "12/01/2009 10:07:52", "01/13/2020 10:08:22", "12/01/2009 12:07:52"]
ts.sort(key=lambda x: -datetime.strptime(x, '%m/%d/%Y %H:%M:%S').timestamp())
#                                                               ^^^^ convert to a number here
ts
# ['01/13/2020 10:08:22', '04/20/2010 10:07:30', '12/01/2009 12:07:52', '12/01/2009 10:07:52']

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