You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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']

逻辑说明

  1. 提取日期时间:通过split('__')拆分字符串,拿到包含日期时间的后半段;再用split(' ', 1)拆分出日期时间部分(丢弃后面的随机字符)。
  2. 格式转换:原时间格式是hh-mm,需要替换为hh:mm才能被datetime.strptime正确解析。
  3. 排序依据sort()方法会根据extract_datetime返回的datetime对象进行排序,自动实现“先日期升序,再时间升序”的规则,同时保留原字符串的全部内容。

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

火山引擎 最新活动