Python2.7遍历时间戳列表 用datetime/timedelta计算相邻时间差方法
完整实现方案
1. 前置修正:补全时间转换函数
你原有TS函数缺少返回值,先修正为可用版本:
from datetime import datetime, timedelta def TS(x): z1 = datetime.strptime(x, '%H:%M:%S') z2 = timedelta(hours=z1.hour,minutes=z1.minute,seconds=z1.second) return z2
2. 拆分式实现(逻辑清晰,推荐大多数场景)
转换和差值计算拆分,方便单独复用timedelta列表:
# 输入的时间戳列表 ts_str_list = ['23:05:26', '23:05:28', '23:05:30', '23:05:32'] # 第一步:批量转换所有时间字符串为timedelta格式,用列表推导式遍历调用TS函数 td_list = [TS(ts_str) for ts_str in ts_str_list] # 第二步:循环计算相邻差值,存储两种格式结果 result_list = [] # 循环从倒数第二个元素向前遍历,和后一个元素做差 for i in range(len(td_list)-1, 0, -1): diff = td_list[i] - td_list[i-1] result_item = { 'str_format': str(diff), 'second_format': diff.seconds } result_list.append(result_item)
结果说明
td_list为全量timedelta对象列表,可单独取出做其他运算result_list顺序和要求的计算顺序完全一致:第一个元素为最后两个时间的差值,第二个为倒数第二和倒数第三的差值,以此类推- 遍历取值示例:
for item in result_list: print item['str_format'], item['second_format']
3. 合并式实现(适合超长时间戳列表,节省内存)
如果不需要留存完整timedelta列表,可以边转换边计算,仅存储前一个时间的计算结果:
ts_str_list = ['23:05:26', '23:05:28', '23:05:30', '23:05:32'] result_list = [] pre_td = None # 倒序遍历原始字符串列表,边转换边计算 for ts_str in reversed(ts_str_list): current_td = TS(ts_str) if pre_td is not None: diff = pre_td - current_td result_list.append({ 'str_format': str(diff), 'second_format': diff.seconds }) pre_td = current_td
内容的提问来源于stack exchange,提问作者PCS
相关产品推荐
相关产品推荐

