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