我之前有一个问题: 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。我搜索了很多,但我找不到为什么会出现这个问题。我很感激任何提示来解决这个问题。
答案 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
我已经成功尝试过了,您可以自己看看其他答案是否也对您有用。