Python列表降序排序
Posted
技术标签:
【中文标题】Python列表降序排序【英文标题】:Python list sort in descending order 【发布时间】: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"
]
【问题讨论】:
【参考方案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()
,超级有用以上是关于Python列表降序排序的主要内容,如果未能解决你的问题,请参考以下文章