2017-8-28 python interval 区间处理 发表于 2017-08-28 | 更新于 2018-02-24 | 分类于 Notes , Python | 评论数: | 阅读次数: 本文字数: 3.5k | 阅读时长 ≈ 3 分钟 1234567891011121314>>> volume1 = Interval.between("A", "Foe")>>> volume2 = Interval.between("Fog", "McAfee")>>> volume3 = Interval.between("McDonalds", "Space")>>> volume4 = Interval.between("Spade", "Zygote")>>> encyclopedia = IntervalSet([volume1, volume2, volume3, volume4])>>> mySet = IntervalSet([volume1, volume3, volume4])>>> "Meteor" in encyclopediaTrue>>> "Goose" in encyclopediaTrue>>> "Goose" in mySetFalse>>> volume2 in (encyclopedia ^ mySet)True 1234567a= 112 In [4]: a in range(300,400) ...: Out[4]: False In [5]: a in range(101,300) ...: Out[5]: True 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384python强大的区间处理库interval用法介绍原文发表在我的博客主页,转载请注明出处前言这个库是在阅读别人的源码的时候看到的,觉得十分好用,然而在网上找到的相关资料甚少,所以阅读了源码来做一个简单的用法总结。在网络的路由表中,经常会通过掩码来表示流表的匹配域,在python中有的时候为了方便的模拟流表的匹配过程,可以通过一个整数区间来表示诸如IP等的匹配范围,而本文介绍的库在区间处理上是十分的强大与方便。用法举例不论是在Linux系统还是Windows系统上,我们都可以方便的安装pip或者easy_install库来方便的安装大多数python库,interval也不例外。在这个库中提供了两个主要的类,分别是Interval和IntervalSet两个类。Interval类描述了一个连续的范围区间,这个区间可以是闭、开、半闭半开、无穷的,他的区间值不一定是数字,可以包含任何的数据类型,比如字符串,时间等等,同时他和python的各种操作(<, <=, ==, >=, >等)也是兼容的。IntervalSet包含了一个或多个互不相交的Interval集合。下面的这几个例子是源码中的。 >>>volume1 = Interval.between("A", "Foe")>>>volume2 = Interval.between("Fog", "McAfee")>>>volume3 = Interval.between("McDonalds", "Space")>>>volume4 = Interval.between("Spade", "Zygote")>>>encyclopedia = IntervalSet([volume1, volume2, volume3, volume4])>>>mySet = IntervalSet([volume1, volume3, volume4])>>>"Meteor" in encyclopediaTrue>>>"Goose" in encyclopediaTrue>>>"Goose" in mySetFalse>>>volume2 in (encyclopedia ^ mySet)True前面的三个例子比较容易理解,最后一个例子中,encyclopedia的区别就是mySet多了一个volume2,而异或就是将两个集合中相同的元素去掉,不同的元素保留,所以最后只剩下了volume2。除了字符串,利用interval还可以很方便的处理时间,下面的例子同样来自于源码。 >>>officeHours = IntervalSet.between("08:00", "17:00")>>>myLunch = IntervalSet.between("11:30", "12:30")>>>myHours = IntervalSet.between("08:30", "19:30") - myLunch>>>myHours.issubset(officeHours)False>>>"12:00" in myHoursFalse>>>"15:30" in myHoursTrue>>>inOffice = officeHours & myHours>>>print inOffice['08:30'..'11:30'),('12:30'..'17:00']>>>overtime = myHours - officeHours>>>print overtime('17:00'..'19:30']在前言中说道interval库可以处理IP地址,简单的列举应用如下: # codingr1 = IntervalSet([Interval(1, 1000), Interval(1100, 1200)])r2 = IntervalSet([Interval(30, 50), Interval(60, 200), Interval(1150, 1300)])r3 = IntervalSet([Interval(1000, 3000)])r4 = IntervalSet([Interval(1000, 3000)])r5 = IntervalSet([Interval(30000, 12000)])print (r3 - r4), (r4 - r3), r3 & r4print len(IntervalSet.empty())if r3 & r4 == r4: print 'yes'print r3 & r4if (r3 - r4).empty(): print "true"print (r3 - r4).empty()# output<Empty> <Empty> [1000..3000]0yes[1000..3000]<Empty>常用方法interval对象初始化参数(lower_bound=-Inf, upper_bound=Inf, **kwargs)三个boolean参数closed,lower_closed,upper_closed分表表示全闭,左闭右开,左开右闭。比如:r = Interval(upper_bound=62, closed=False)between(a, b, closed=True):返回以a和b为界的区间less_than(a):小于a的所有值构成interval,类似的还有less_than_or_equal_to,greater_than,greater_than_or_equal_to函数join(other):将两个连续的intervals组合起来overlaps(other):两个区间是否有重叠adjacent_to(other):两个区间是否不重叠的毗邻总结是一篇总结文章,并没有什么深度,只是为了不再重复造轮子,在必要的时候一个库可以极大的提高效率。MeasureMeasure 相关文章 2017-8-27 python 协程加速 2017-10-16 The unit test and mock in python 2017-5-15 数据分析 入门 2017-5-16 从字典中提取子集 2017-5-23 一个逗号(,)引起的BUG 支持小徐?賞一賞! 打赏 微信支付 支付宝