减去Python中范围的重叠

时间:2017-11-03 00:30:59

标签: python-3.x range

我之前有一个问题: Subtract Overlaps Between Two Ranges Without Sets但是,提供的解决方案似乎已过时,并给我以下错误:

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)
  

TypeError:'<' “间隔”和“间隔”

的实例之间不受支持

我正在使用python 3.6。我搜索了很多,但我找不到为什么会出现这个问题。我很感激任何提示来解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果继续阅读,将会发现从@Ned Deily发布的解决方案不适用于python3。然后,您还将看到针对此问题的不同方法和解决方案,因此您可以尝试一些看看哪个对您有用,就像@senderle在该链接中发布的答案:

import itertools

def range_diff(r1, r2):
    s1, e1 = r1
    s2, e2 = r2
    endpoints = sorted((s1, s2, e1, e2))
    result = []
    if endpoints[0] == s1:
        result.append((endpoints[0], endpoints[1]))
    if endpoints[3] == e1:
        result.append((endpoints[2], endpoints[3]))
    return result

def multirange_diff(r1_list, r2_list):
    for r2 in r2_list:
        r1_list = list(itertools.chain(*[range_diff(r1, r2) for r1 in r1_list]))
    return r1_list

我已经成功尝试过了,您可以自己看看其他答案是否也对您有用。