python - 在没有集合的情况下减去两个范围之间的重叠

标签 python range overlap

没有设置!

我不能使用 Sets 因为:

  • 范围太长。
  • 它们会占用太多内存
  • 集合本身的创建将花费太长时间。

仅使用范围的端点,是否存在减去两个范围列表的最佳方法?

示例:

r1 = (1, 1000), (1100, 1200)  
r2 = (30, 50), (60, 200), (1150, 1300)

r1 - r2 = (1, 29), (51, 59), (201, 1000), (1100, 1149)

其他信息:

  • r2 不必与 r1 重叠
  • r1 和 r2 不会有与其他对重叠的对。例如,r1 不会同时具有 (0,30) 和 (10, 25)

谢谢。

最佳答案

interval软件包可能会提供您需要的一切。

from interval import Interval, IntervalSet
r1 = IntervalSet([Interval(1, 1000), Interval(1100, 1200)])
r2 = IntervalSet([Interval(30, 50), Interval(60, 200), Interval(1150, 1300)])
print(r1 - r2)

>>> [1..30),(50..60),(200..1000],[1100..1150)

关于python - 在没有集合的情况下减去两个范围之间的重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462272/

相关文章:

python - 如何在Django中实现全文搜索?

python - 如何使用 to_sql 创建表时强制使用 utf8mb4?

vba - 如何将找到的单元格变成一个范围?

mysql - 按间隔对列 2 排序并对列 1 降序排序

python - 试图让 PyC​​harm 工作,不断收到 "No Python interpreter selected"

python - mysql python 合并结果

javascript - 给定一个索引,从数组中返回一系列值

c - 确保船只不重叠

ios - UISearchController 搜索栏与 CollectionView 重叠

css - 如何在窗口调整大小时调整图像大小?