问题描述
我正在尝试优化我的一段代码,但是我不知道哪种代码是最好的数据结构,或者是否有某些东西可以满足我的要求。
我有一个具有已定义的开始和结束时间点(均为浮动)的实体列表。
我正在尝试建立一个索引,该索引可以让我查找跨越给定时间点的哪些窗口(开始和停止)。
目前,我只是简单地迭代字典,并检查每个实体是否为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']