python数据结构来查找跨越给定时间点的窗口

问题描述

我正在尝试优化我的一段代码,但是我不知道哪种代码是最好的数据结构,或者是否有某些东西可以满足我的要求。

我有一个具有已定义的开始和结束时间点(均为浮动)的实体列表。 我正在尝试建立一个索引,该索引可以让我查找跨越给定时间点的哪些窗口(开始和停止)。 目前,我只是简单地迭代字典,并检查每个实体是否为start < t < stop

这是一个小例子:

entities = {
    'a': (0,32.31),'b': (2,22.00312),'c': (10,34.1),'d': (22,40.2)
}

预期的输出将是这样的:

t = 12
index = build_index(entities)
candidates = find_candidates(t,index)
print(candidates)
['a','b','c']

t = 33
index = build_index(entities)
candidates = find_candidates(t,index)
print(candidates)
['c','d']

实体列表可以增长到数十万个。 在标准笔记本电脑(假设8 GB RAM)上尽快找到这些窗口的最佳数据结构/编程方法是什么?

我对解决方案的想法很满意,我并不一定要寻找可以满足我需要的完整工作代码

解决方法

借助@ Adam.Er8的帮助,我能够找到解决方案。

使用intervaltree模块可以轻松解决该问题。

from intervaltree import IntervalTree

 entities = {
    'a': (0,32.31),'b': (2,22.00312),'c': (10,34.1),'d': (22,40.2)
}
for key,r in entities.items():
    t[r[0]:r[1]] = key

results = t.at(12)
print([x.data for x in results])
['a','b','c']