Python:如何基于日期和时间对特定格式的字符串列表进行升序排序?
按日期时间对列表字符串排序的解决方案
没问题,这事儿在Python里很好解决!我们可以利用列表的sort()方法,通过自定义排序键提取每个字符串中的日期时间信息,转换成datetime对象后进行排序——因为datetime对象天然支持按时间先后比较,刚好能满足你先日期升序,再时间升序的要求,同时还能保留原字符串的完整内容。
具体实现代码
首先导入datetime模块,然后定义排序逻辑:
from datetime import datetime # 你的原始列表 list1 = ['3__01-11-2020 12-15 asiudhais', '12__04-11-2020 01-10 dgsisdwrais', '3__01-09-1990 02-34 dfsdweis'] # 自定义排序键:提取日期时间并转换为datetime对象 def extract_datetime(s): # 分割出__后面的内容,再拆分出日期时间部分(去掉末尾的随机字符) dt_segment = s.split('__')[1].split(' ', 1)[0] # 得到格式如"01-11-2020 12-15"的字符串 # 将时间部分的'-'替换为':',适配datetime的解析格式 date_part, time_part = dt_segment.split(' ') time_part = time_part.replace('-', ':') full_dt_str = f"{date_part} {time_part}" # 解析为datetime对象 return datetime.strptime(full_dt_str, "%d-%m-%Y %H:%M") # 执行排序(直接修改原列表,或者用sorted()返回新列表) list1.sort(key=extract_datetime) # 查看结果 print(list1)
运行结果
排序后的列表会按照日期从早到晚、同日期下时间从早到晚排列,输出如下:
['3__01-09-1990 02-34 dfsdweis', '3__01-11-2020 12-15 asiudhais', '12__04-11-2020 01-10 dgsisdwrais']
逻辑说明
- 提取日期时间:通过
split('__')拆分字符串,拿到包含日期时间的后半段;再用split(' ', 1)拆分出日期时间部分(丢弃后面的随机字符)。 - 格式转换:原时间格式是
hh-mm,需要替换为hh:mm才能被datetime.strptime正确解析。 - 排序依据:
sort()方法会根据extract_datetime返回的datetime对象进行排序,自动实现“先日期升序,再时间升序”的规则,同时保留原字符串的全部内容。
内容的提问来源于stack exchange,提问作者Derik0003




