Python中的事件列表
我在找一种高效的方法来解决一个特定的问题,使用的是Python编程语言。我有一串事件,每个事件都有一个时间戳。简单来说,我把这些事件按时间顺序添加到一个列表的末尾,然后对它们进行一些处理,比如根据事件的类型来调整一些计数和平均值。当事件超过15分钟后,我就会把列表开头的事件移除,并相应地调整我的计数和平均值。Python的collections模块里的deque类非常适合这个用途。
接下来是我的问题,我想在这个基础上扩展一下,同时还要记录过去5分钟和1分钟内的事件的计数和平均值。我的理解是,使用一个单独的deque来处理这些时间段的事件超时会很低效。我可以在deque中保持一对索引,分别指向5分钟和1分钟的超时事件,但我了解到,访问deque中的元素是O(n)的操作,这样效率不高。我也可以使用3个不同的deque,每个时间段一个,事件(或事件的引用)在每个列表中重复,这样做感觉又麻烦又不优雅。
我现在考虑的解决方案是使用链表,但这在Python中似乎有点底层;我觉得Python并没有提供链表的结构,所以我需要自己写一个。还有一些额外的限制,比如事件数量很大,而内存又比较有限。如果你有其他的建议或见解,能帮我解决这个问题,我会非常感激。
1 个回答
2
你可以使用三个双端队列(deque),具体方法是:
- 第一个用来记录1分钟的时间间隔(而不是15分钟)
- 第二个用来记录5分钟的时间间隔,它会接收第一个队列中的事件
- 第三个用来记录15分钟的时间间隔,它会接收第二个队列中的事件。
这样做的话,就不需要担心重复数据,也不需要进行索引。而且这个方法还可以扩展。