python中interval函数_python强大的区间处理库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 encyclopedia
True
>>> "Goose" in encyclopedia
True
>>> "Goose" in mySet
False
>>> 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 myHours
False
>>> "15:30" in myHours
True
>>> inOffice = officeHours & myHours
>>> print inOffice
['08:30'..'11:30'),('12:30'..'17:00']
>>> overtime = myHours - officeHours
>>> print overtime
('17:00'..'19:30']
在前言中说道interval库可以处理IP地址,简单的列举应用如下:
# coding
r1 = 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 & r4
print len(IntervalSet.empty())
if r3 & r4 == r4:
print 'yes'
print r3 & r4
if (r3 - r4).empty():
print "true"
print (r3 - r4).empty()
# output
[1000..3000]
0
yes
[1000..3000]
常用方法
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):两个区间是否不重叠的毗邻
总结
是一篇总结文章,并没有什么深度,只是为了不再重复造轮子,在必要的时候一个库可以极大的提高效率。
来源:oschina
链接:https://my.oschina.net/u/4349518/blog/4673184
python中interval函数_python强大的区间处理库interval用法介绍相关推荐
- python中pop函数_Python中的Pop函数
python中pop函数 什么是弹出功能? (What is the pop function?) The method pop() removes and returns the last elem ...
- python中factor函数_Python入门-函数
函数 在维基百科上函数式这样描述的: 函数在数学中为两集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素. 此处的函数区别于我们数学上的函数,在编程世界中,函数(Funct ...
- python中mat函数_Python中flatten( )函数及函数用法详解
flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...
- python中set函数_python中set()函数简介及实例解析
set函数也是python内置函数的其中一个,属于比较基础的函数.其具体介绍和使用方法,下面进行介绍. set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并 ...
- python中property函数_python 邮件表格Python中property函数用法实例分析
本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...
- python中help函数_Python help()函数
python中help函数 Python help() function is used to get the documentation of specified module, class, fu ...
- python中exp函数_python中exp函数如何实现指数计算?
原标题:python中exp函数如何实现指数计算? 之前小编向大家介绍过python中的对数函数log函数(https://www.py.cn/jishu/jichu/21780.html),对于有点 ...
- python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)
一.闭包: 记得:闭包的特性就是:内嵌函数会保存它引用的外围函数的变量值. 闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数和被引用的变量等 ...
- python中choice函数_Python中choice函数的实现方法
Python中choice函数的实现方法 发布时间:2020-12-15 09:28:06 来源:亿速云 阅读:82 作者:小新 这篇文章主要介绍Python中choice函数的实现方法,文中介绍的非 ...
- python中locals函数_python中locals函数的作用是什么?
在python中,每个模块拥有它自已的名字空间,即全局名字空间.它记录了模块的变量,包括函数.类.其它导入的模块.模块级的变量和常量,方便python的使用.python中字典的使用也是很常见的,使用 ...
最新文章
- 关于Eclipse平台的使用和开发第一个SWT程序
- IT人 不要一辈子靠技术生存(转)
- C# json解析字符串总是多出双引号_Python小白必备知识:Python字符串详解
- windows7 安装IIS没有default web site 解决方法
- python之新式类与经典类
- 三个子系统_「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)
- Halcon—Tuple中符号的含义
- 为什么说Serverless是云的未来?
- 点击空链接,页面不跳到页头
- 【译】Silverlight for Windows Phone Toolkit In Depth(五)
- 语录:101条伟大的计算机编程名言
- Matlab程序中调用其他程序
- [Zer0pts2020]ROR1
- AMD 2020届IC校招笔试题
- NZT、AWZ这种一键新机软件原理详解!
- Android移动开发基础案例教程第2版课后习题
- 手机版vmlogin怎么下载?VMlogin指纹浏览器适合哪些行业?
- linux内核学习(5)山重水复疑无路*
- js实现漂亮的雪花飘落效果
- 淘宝Hadoop作业平台宙斯(zeus)开源
热门文章
- Oracle中打印99乘法表的13种方法
- QPalette类详细使用方法
- 尚硅谷JavaWeb笔记——Filter过滤器(了解过滤器,看着一篇就够了)
- 史上最“犯贱”的十首情歌
- Keras多层感知器模型对IMDB进行情感分析
- QuickTime格式解析
- 出色的社区网站_《最后的我们》中出色的制作系统
- BIOS知识枝桠——UEFI Driver
- 【 Codeforces Round #521 (Div. 3) E. Thematic Contests】二分+STL
- Thematic Contests CodeForces - 1077E