没有设置!
我不能使用 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/