gpt4 book ai didi

python - 获取两个非离散区间的交集范围

转载 作者:行者123 更新时间:2023-11-28 22:25:49 26 4
gpt4 key购买 nike

给定由起点和终点(均为 float )定义的间隔,我想用第二个间隔确定交集范围。例如:

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 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

关于python - 获取两个非离散区间的交集范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com