Python中如何对包含日期时间的字符串进行正序及倒序排序
排序实现方案
原代码失效原因
你写的strptime格式字符串和实际待解析的字符串结构完全不匹配,会直接抛出ValueError:
- 原格式用了
-作为分隔符,但实际字符串的日期、时间都是用.分隔 - 格式符
%b对应英文月份缩写(如Jan、Feb),但你的日期是数字月份 - 没有匹配字符串里的
time固定字段和后续的时间部分,strptime要求格式串和待解析字符串完全匹配
正确实现代码
首先提前导入datetime模块:
from datetime import datetime
你的原始字符串结构为日.月.年 time 时.分,对应的解析格式串为%d.%m.%y time %H.%M
正序排序(时间从早到晚)
如果需要直接修改原列表:
my_strings.sort(key=lambda s: datetime.strptime(s, "%d.%m.%y time %H.%M"))
如果需要保留原列表,生成新的排序后列表:
asc_sorted_list = sorted(my_strings, key=lambda s: datetime.strptime(s, "%d.%m.%y time %H.%M"))
倒序排序(时间从晚到早)
增加reverse=True参数即可:
# 直接修改原列表 my_strings.sort(key=lambda s: datetime.strptime(s, "%d.%m.%y time %H.%M"), reverse=True) # 生成新列表 desc_sorted_list = sorted(my_strings, key=lambda s: datetime.strptime(s, "%d.%m.%y time %H.%M"), reverse=True)
排序结果示例
正序排序后的输出如下:
['06.02.20 time 08.51', '10.02.20 time 09.24', '10.02.20 time 09.24', '10.02.20 time 09.25', '10.02.20 time 09.26', '10.02.20 time 09.27', '10.02.20 time 09.28', '10.02.20 time 09.29']
内容的提问来源于stack exchange,提问作者tajir12457
相关产品推荐
相关产品推荐

