You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单次遍历事件列表统计每30分钟区间的事件数?

单次遍历实现30分钟区间事件统计

核心思路

无需对事件列表重复遍历48次,通过单次遍历+区间索引计算即可完成统计:

  • 初始化长度为48的计数数组(对应一天内48个30分钟区间)
  • 遍历每个事件时,计算其所属的区间索引,直接对对应位置的计数加1
  • 全程仅依赖Python内置的datetime模块,无需额外第三方库

代码实现

假设事件列表中的元素为时间字符串(若已是datetime对象可跳过解析步骤):

from datetime import datetime

# 示例事件列表
event_list = [
    "2024-05-20 00:12:30",
    "2024-05-20 00:45:10",
    "2024-05-20 12:30:00",
    "2024-05-20 23:50:00",
    "2024-05-20 00:20:00"
]

# 初始化48个区间的计数,初始值为0
interval_counts = [0] * 48

for time_str in event_list:
    # 解析时间字符串为datetime对象,提取时分信息
    event_time = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
    # 计算当天已过的总分钟数
    total_minutes = event_time.hour * 60 + event_time.minute
    # 计算所属区间的索引(0~47对应48个30分钟区间)
    idx = total_minutes // 30
    # 对应区间计数+1
    interval_counts[idx] += 1

# 格式化输出每个区间的统计结果
for idx, count in enumerate(interval_counts):
    # 计算区间起始时间
    start_h = idx // 2
    start_m = (idx % 2) * 30
    # 计算区间结束时间
    end_h = start_h if start_m == 0 else start_h + 1
    end_m = 30 if start_m == 0 else 0
    # 打印结果
    print(f"{start_h:02d}:{start_m:02d}-{end_h:02d}:{end_m:02d} | 事件数量: {count}")

效率说明

该方案时间复杂度为O(n)(n为事件列表长度),相比原方案的O(48n),在数据量较大时性能提升显著——比如当事件数为100万时,原方案需执行4800万次操作,而本方案仅需100万次。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:54:59