Python列表按降序排序


334

如何按降序对列表进行排序?

timestamp = [
    "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"
]

Answers:


387

在一行中,使用lambda

timestamp.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]

timestamp.sort(key=foo, reverse=True)

13
不必转换为时间元组。
Marcelo Cantos

2
@Marcelo:只是偶然。
伊格纳西奥·巴斯克斯

16
@ IgnacioVazquez-Abrams不,不是偶然的。ISO 8601进行了明确设计,以使字母顺序与时间顺序一致。
jwg

@jwg同意您的观点(显然是设计使然,不是巧合),但给定的格式不符合ISO8601。–
Marcelo Cantos

2
@jwg日期和时间部分之间有一个空格。
马塞洛·坎托斯

381

这将为您提供阵列的排序版本。

sorted(timestamp, reverse=True)

如果要就地排序:

timestamp.sort(reverse=True)

2
reverse是在2.4中添加的。但是请注意,这sort()是稳定的,因此给出的两位代码不一定会得到相同的结果。
伊格纳西奥·巴斯克斯

3
@Rajeev-不要忘了只有按这种方式写日期(YYYY-MM-DD HH:MM:SS),您才能对日期进行排序。“ DD.MM.YYYY”将是一个很好的例子,在这里您不仅需要sort(reverse=True)
eumiro 2010年

print(“排序前列出”); print(myList); myList.sort(reverse = True); print(“ sortedList:” + str(myList));
Erum

@Erum是答案,而不是评论,作为答案,它是多余的。
Marcelo Cantos'4

56

您可以简单地做到这一点:

timestamp.sort(reverse=True)

10

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

>>> timestamp.reverse()
>>> timestamp
['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']

9

您简单的输入:

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

这是一个奇怪的答案,因为您在原地进行排序,然后在原地进行反向排序。如果存在另一个别名作为原始列表的变量,则其后的值将不具有按其原始顺序或降序排列的元素;别名将指向以升序排列的列表。这可能是相当令人惊讶的,并且是一些细微错误的来源。
kaya3

0

这是另一种方式


timestamp.sort()
timestamp.reverse()
print(timestamp)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.