如何高效过滤datetime列表,仅保留每小时前10分钟数据?
高效筛选每个小时前10分钟的时间戳
直接利用Python datetime 对象的 minute 属性做线性过滤是最简洁高效的方案,无需分组、排序这类额外操作,时间复杂度仅为O(n)(n为原列表长度)。
核心代码
假设你的时间戳列表名为 timestamps,一行代码就能完成筛选:
filtered_timestamps = [dt for dt in timestamps if dt.minute < 10]
原理说明
每个 datetime.datetime 实例自带 minute 属性,直接判断该属性是否小于10即可:
- 若
dt.minute < 10,说明该时间属于当前小时的前10分钟(0分~9分59秒999999),符合保留条件 - 反之则剔除
对比原方案的优势
你原本的分组排序方案需要额外的分组逻辑和排序操作,时间复杂度至少为O(n log n)(排序的开销),而线性过滤仅需遍历一次列表,代码更简洁,执行效率也更高。
示例验证
用你给出的示例数据测试:
import datetime timestamps = [ datetime.datetime(2019, 6, 14, 14, 8, 23, 493000), datetime.datetime(2019, 6, 14, 14, 25, 23, 493000), datetime.datetime(2019, 6, 21, 20, 45, 23, 868000), datetime.datetime(2019, 6, 21, 20, 5, 23, 993000) ] filtered_timestamps = [dt for dt in timestamps if dt.minute < 10] # 输出结果: # [datetime.datetime(2019, 6, 14, 14, 8, 23, 493000), datetime.datetime(2019, 6, 21, 20, 5, 23, 993000)]
内容的提问来源于stack exchange,提问作者M.Tailleur
相关产品推荐
相关产品推荐

