【问题标题】:Subtracting overlap of ranges in Python减去Python中范围的重叠
【发布时间】:2019-04-12 22:23:15
【问题描述】:

我有一个问题,之前在这里被问过: 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。我已经搜索了很多,但我找不到为什么会出现这个问题。我将不胜感激任何解决此问题的提示。

【问题讨论】:

  • 这只是意味着您不能在Interval 对象上使用<。如果你需要这个功能,你应该向包的维护者提出问题。
  • 或子类 Interval 并根据自己的喜好实现 < 运算符。

标签: python-3.x range


【解决方案1】:

如果您阅读一下,您会发现您从@Ned Deily 发布的解决方案不适用于 python 3。然后您还将看到针对此问题的不同方法和解决方案,因此您可以尝试一些和看看哪一个适合你,就像@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

我已经成功尝试过了,你可以自己看看其他答案是否也适合你。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多