You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确排序MM/DD/YYYY格式的日期字符串列表?

解决MM/DD/YYYY格式日期字符串排序错误的问题

问题原因

直接调用.sort()对MM/DD/YYYY格式的日期字符串排序时,Python会按字典序逐字符比较:

  • 字符串最左侧是月份,排序优先比较月份的字符;
  • 2021年10-12月的日期字符串以10/11/12开头,而2022年1-7月的日期以01-07开头,由于字符1的ASCII码大于0,导致2021年的日期被排在2022年之后,不符合时间先后顺序。

解决方案

方案1:使用datetime模块解析日期排序

将字符串转换为datetime对象,利用日期对象的时间属性排序:

from datetime import datetime

listOfDates = ['07/25/2022', '07/19/2022', '04/19/2022', '02/18/2022', '01/18/2022', '10/20/2021', '10/27/2021', '11/26/2021', '12/23/2021', '01/05/2022', '01/07/2022', '01/18/2022', '01/21/2022', '01/24/2022', '02/24/2022', '02/25/2022', '03/16/2022', '03/25/2022', '04/29/2022', '05/10/2022', '05/11/2022', '05/31/2022', '06/08/2022', '06/10/2022', '06/13/2022', '06/14/2022', '07/14/2022']

# 按日期对象排序,原地修改列表
listOfDates.sort(key=lambda date_str: datetime.strptime(date_str, '%m/%d/%Y'))

print(listOfDates)

执行后会得到从10/20/2021到07/25/2022的正确升序列表。

方案2:拆分字符串重组排序键(无需导入模块)

拆分日期字符串,按年→月→日的顺序生成元组作为排序键,利用元组的逐元素比较特性实现时间排序:

listOfDates = ['07/25/2022', '07/19/2022', '04/19/2022', '02/18/2022', '01/18/2022', '10/20/2021', '10/27/2021', '11/26/2021', '12/23/2021', '01/05/2022', '01/07/2022', '01/18/2022', '01/21/2022', '01/24/2022', '02/24/2022', '02/25/2022', '03/16/2022', '03/25/2022', '04/29/2022', '05/10/2022', '05/11/2022', '05/31/2022', '06/08/2022', '06/10/2022', '06/13/2022', '06/14/2022', '07/14/2022']

# 拆分后按(年, 月, 日)的元组排序
listOfDates.sort(key=lambda date_str: (date_str.split('/')[2], date_str.split('/')[0], date_str.split('/')[1]))

print(listOfDates)

该方法同样能得到符合时间顺序的排序结果,适合不想引入额外模块的场景。


内容的提问来源于stack exchange,提问作者devTokyo90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:09:22