前言
使用python进行数据处理的时候,有时会遇到判断一个数是否在一个区间内的 操作,我们可以使用if else进行判断,但是,既然使用了python,那我们当然是想找一下有没有现成的东西可以用,事实上,可以用interval这个库来完成我们目前需要的操作。
区间判断
最基础的区间判断操作就是先创建一个区间,然后使用in来判断一个数是否存在于区间之内
from interval import Interval
#创建实例
zoom_2_5 = Interval(2,5)
print(zoom_2_5)
#左右边界均包含在内,为全闭区间
#[2..5]
print(2 in zoom_2_5)
#True
print(6 in zoom_2_5)
#False
可以从上面的代码中看到,我们先使用interval创建一个集合,然后将我们想要比较的数用in即可得到结果,但是,我们都知道,我们的集合其实是有分开区间和闭区间的,上面的代码中,创建的是[2,5]的区间集合,下面我们讲一下如何创建开区间
from interval import Interval
#创建一个左半开区间
zoom_2_5 = Interval(2,5,lower_closed = False)
print(zoom_2_5)
#(2..5]
print(2 in zoom_2_5)
#False
#创建一个右半开区间
zoom_1_5 = Interval(1,5,upper_closed = False )
print(zoom_1_5)
#[1..5)
print(1 in zoom_1_5)
#True
从上面的代码中可以看到,在使用Interval创建区间的时候,使用lower_closed参数,我们可以将区间下限设置为一个开区间,这样比较2是否在这个区间内的时候,返回的结果是False,类似的,如果区间上限设置为开区间,可以将upper_closed设置为False,如果想直接创建一个开区间,可以直接设置closed为False
区间合并,判断是否交叉重复及是否比邻
interval有三种区间的操作方法,分别是join,overtaps,adjacent_to,以下将演示这三个方法的用法
from interval import Interval
zoom_1_3 = Interval(1,3,lower_closed=False)
zoom_3_5 = Interval(3,5,lower_closed=False)
#合并
zoom_1_5 = zoom_1_3.join(zoom_3_5)
print(zoom_1_5)
zoom_1_3 = Interval(1,3,upper_closed=False)
zoom_3_5 = Interval(3,5,upper_closed=False)
#判断交集
print(zoom_1_3.overlaps(zoom_3_5))
zoom_0_1 = Interval(0, 1, upper_closed=False)
zoom_1_3 = Interval(1, 3, lower_closed=False)
zoom_1_3_ = Interval(1, 3)
#测试是否比邻
print(zoom_0_1.adjacent_to(zoom_1_3))#False
#反向测试
print(zoom_1_3.adjacent_to(zoom_0_1))#False
#zoom_0_1 和 zoom_1_3_ 比邻
print(zoom_0_1.adjacent_to(zoom_1_3_))#True
#比邻是指:1、两个区间相邻的边界值相等 2、同时这两个边界一个为开区间,一个为闭区间,即两个区间没有交集
区间解释:
数学区间是指某一范围。分类有全开区间、全闭区间、半开半闭区间、半闭半开区间。
全开区间:表示符号为( ),指不包括端点的区间,例如(2,4),表示实数范围内大于2小于4范围内的实数;
全闭区间:表示符号为[ ],指包括端点的区间,例如[2,4],表示实数范围内大于等于2小于等于4范围内的实数;
半开半闭区间:表示符号为( ],指不包括最小数据的端点,而包括最大数据的端点的区间,例如(2,4],表示实数范围内大于2小于等于4范围内的实数;
半闭半开区间:表示符号为[ ),指包括最小数据的端点,而不包括最大数据的端点的区间,例如[2,4),表示实数范围内大于等于2小于4范围内的实数.
[a,b]
a<=x<=b
取值包括a,b
(a,b)
a
取值不包括a,b
[a,b)
a<=x
取值包括a,不包括b
(a,b]
a
取值不包括a,包括b