python3的interval3库,区间工具

interval3

interval3是区间模块(interval)的分支,主要用于处理区间间隔类型的数据,比如日期、IP地址、频段等。支持python2.7以及python3.x,在linux和windows上都兼容。

interval3模块提供了Interval和IntervalSet两种数据类型。Interval类描述了一个连续的范围区间,这个区间可以是闭、开、半闭半开、无穷的,他的区间值不一定是数字,可以包含任何支持python比较操作(<, <=, ==, >=, >等)的数据类型,比如字符串,时间等等,因此,Interval对象也支持python的<, <=, ==, >=, >等操作;而IntervalSet包含了一个或多个Interval集合。

安装

pip install interval3

常用方法

Interval
Interval(lower_bound=-Inf, upper_bound=Inf, closed=True, upper_closed=True, lower_closed=True) # 返回一个开/闭区间的Interval对象,默认上限无穷大,下限无穷小
between(a, b, closed=True) # 返回一个开/闭区间的Interval对象,(a, b)或者[a, b]
equal_to(a) # 返回Interval对象,区间值[a, a]
less_than(a) # 返回Interval对象,区间值(-inf, a)
less_than_or_equal_to(a) # 返回Interval对象,区间值(-inf, a]
greater_than(a) # 返回Interval对象,区间值(a, inf)
greater_than_or_equal_to(a) # 返回Interval对象,区间值[a, inf)
join(other)  # 将两个连续的Interval对象拼接,返回新的Interval对象,如果不是连续的区间对象则会抛出异常
overlaps(other) # 两个区间是否有重叠
adjacent_to(other) # 两个区间是否不重叠的毗邻,例:Interval(3, 6, closed=False).adjacent_to(Interval(6,8))
IntervalSet
IntervalSet存储区间集合,自动将有交集的区间合并
add 追加一个区间或者单个值,传入一个Interval对象或者一个值,无返回值
remove 移除某个区间或者单个值,传入一个Interval对象或者一个值,无返回值,如果值或者区间不在集合中则抛出异常
discard 同remove,但是值或者区间不在集合中不会抛出异常
difference_update 与传入的区间集合取差集
update 更新区间集合,传入一个区间集合,将原区间集合更新
因此:
IntervalSet对象同样支持集合运算

使用

主要是将时间段或者ip地址段或者区间段专为Interval对象后,通过IntervalSet做集合操作,注意:操作时间或者ip地址时,需要自行做临界值的处理。

officeHours = IntervalSet.between("08:00", "17:00")
myLunch = IntervalSet.between("11:30", "12:30")
officeHours & myHours 
>>> ['08:30'..'11:30'),('12:30'..'17:00']

r1 = IntervalSet([Interval(1, 1000), Interval(1100, 1200)])
r2 = IntervalSet([Interval(30, 50), Interval(60, 200), Interval(1150, 1300)])
r1 - r2
>>> IntervalSet([Interval(1, 30, lower_closed=True, upper_closed=False), Interval(50, 60, lower_closed=False, upper_closed=False), Interval(200, 1000, lower_closed=False, upper_closed=True), Interval(1100, 1150, lower_closed=True, upper_closed=False)])
r1 & r2
>>> IntervalSet([Interval(30, 50, lower_closed=True, upper_closed=True), Interval(60, 200, lower_closed=True, upper_closed=True), Interval(1150, 1200, lower_closed=True, upper_closed=True)])
r1 | r2
>>> IntervalSet([Interval(1, 1000, lower_closed=True, upper_closed=True), Interval(1100, 1300, lower_closed=True, upper_closed=True)])

interval3库的源码很简单,也不涉及复杂逻辑,只是避免重复造轮子,在必要的时候提高开发效率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硪就是硪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值