Python如何从交替存储时间与版本的列表中提取最新时间对应版本号
实现代码及说明
完整可运行示例
from datetime import datetime # 测试用的输入列表 output = [ '2020-09-24 14:58:24.273000+00:00', 'v1.0.0-rc.2', '2019-09-24 14:58:24.273000+00:00', 'v1.3' ] # 校验列表结构合法性 if len(output) % 2 != 0: raise ValueError("列表长度为奇数,不符合时间与版本号交替成对存储的规则") # 配对时间与版本,取最新时间对应的版本 latest_version = max( zip(output[::2], output[1::2]), key=lambda item: datetime.fromisoformat(item[0]) )[1] print(latest_version)
运行以上代码输出结果为:v1.0.0-rc.2,和需求预期一致。
逻辑说明
- 利用列表切片按步长取值:
output[::2]提取所有UTC时间字符串,output[1::2]提取所有对应版本号 - 通过
zip()将两组切片拼接为(时间字符串, 版本号)的元组对,保证时间和版本对应关系正确 - 用
max()函数比较元组的时间维度,比较时将时间字符串转换为带时区的datetime对象,避免字符串直接比较可能出现的格式兼容问题 - 最终取最大时间元组的第二个元素,即为最新时间对应的版本号
低版本Python兼容方案
如果使用Python3.7以下版本,datetime.fromisoformat方法不可用,可替换为指定格式解析的写法:
latest_version = max( zip(output[::2], output[1::2]), key=lambda item: datetime.strptime(item[0], "%Y-%m-%d %H:%M:%S.%f%z") )[1]
内容的提问来源于stack exchange,提问作者ajay.kumar.awscloud
相关产品推荐
相关产品推荐

