查找间隔是否在一组间隔内

时间:2020-05-30 16:58:59

标签: python search set intervals

我正在使用python-intervals包中的portion在Python中:import portion as P

要检查某项是否包含在集合中,我们可以执行item in set,例如2 in {2,3}给出True。 (这需要O(1)时间)

要检查一个间隔是否包含在另一个间隔中,我们可以执行item in interval,例如P.closed(2,3) in P.open(1,10)给出True

我想检查一个间隔列表中是否包含一个间隔。 (O(n))的迭代方法是:

import portion as P

intervals_set = {P.open(1,10), P.open(20,30)}
item = P.closed(2,3)
result = []
for s in intervals_set:
    if item in s:
        result.append(item)

我必须在很长的时间间隔内搜索许多项目(对循环多次运行),所以我想知道是否存在一种有效的方法来查找时间间隔内是否存在一个时间间隔? / p>

1 个答案:

答案 0 :(得分:0)

我是portion的维护者。

portion支持开箱即用的间隔集,因此您无需手动创建一组间隔(例如,不需要{P.open(1,10), P.open(20,30)})。只需创建这些间隔的分离,即可使用:

interval = P.open(1, 10) | P.open(20, 30)
item = P.closed(2, 3)
assert item in interval

这将比您建议的解决方案快一点,因为portion在内部对间隔进行排序(分离),并从排序中受益,从而使事情变得更快。

如果您有很多物品,则循环变为:

for item in items: 
  if item in interval: 
    result.append(item)

或者,使用列表推导,[item for item in items if item in interval]