Python 获取两个非离散区间的相交范围

Python 获取两个非离散区间的相交范围,python,intervals,Python,Intervals,给定一个由起点和终点(两个浮动点)定义的间隔,我想用第二个间隔确定交点范围。例如: int1 = [2. , 5.] int2 = [2.2, 7.] >>> desired_function(int1, int2) 2.8 它应处理所有交叉点的可能性(无交叉点、部分交叉点、完全交叉点,以及负范围等)。我的尝试如下所示: def intersection(int1, int2): #case 1: partial intersection over the le

给定一个由起点和终点(两个浮动点)定义的间隔,我想用第二个间隔确定交点范围。例如:

int1 = [2. , 5.] 
int2 = [2.2, 7.]

>>> desired_function(int1, int2)
2.8
它应处理所有交叉点的可能性(无交叉点、部分交叉点、完全交叉点,以及负范围等)。我的尝试如下所示:

def intersection(int1, int2):

    #case 1: partial intersection over the left or right border
    if (int2[0]<=int1[0] and int2[1]<=int1[1]) or (int2[0]>=int1[0] and int2[1]>=int1[1]):
        return min(int1[1],int2[1]) - max(int1[0],int2[0])

    #case 2: complete overlap of one interval by the other
    elif (int2[0]>=int1[0] and int2[1]<=int1[1]) or (int2[0]<=int1[0] and int2[1]>=int1[1]):
        return min (int2[1]-int2[0] , int1[1]-int1[0])

    #case 3: no overlap at all
    else:
        return 0
def交叉点(int1、int2):
#情况1:左边界或右边界上的部分交点
如果(int2[0]=int1[1]):
返回最小值(int1[1],int2[1])-max(int1[0],int2[0])
#案例2:一个间隔与另一个间隔完全重叠

elif(int2[0]>=int1[0]和int2[1]你把事情弄得太复杂了,一个简单的函数就是:

def interval_intersect(a,b):
    a0,a1 = a
    b0,b1 = b
    return max(0,min(a1,b1)-max(a0,b0))
我们只需计算两个区间的最大起点和最小终点,然后计算差值并使用
max(0,…)
确保如果没有区间,我们将返回0

我们可以将该函数进一步推广为:

from operator import itemgetter

def interval_intersect(*args):
    return max(0,min(map(itemgetter(1),args))-max(map(itemgetter(0),args)))
让它以任意数量的间隔工作。这两者都给出:

>>> interval_intersect((2,5),(2.2,7))
2.8
你可以这样做


max(0,min(range1[1],range2[1])-max(range1[0],range2[0])

谢谢!这实际上正是我第一个案例的
return
语句,但我不知怎的努力了,并没有意识到这已经处理了多个时间间隔的解决方案的所有可能性…
+1