Python是否有不连续的范围类?

Python是否有不连续的范围类?,python,Python,我想表示一个任意复杂的实值范围,它可以是不连续的,即: 0--4 and 5--6 and 7.12423--8 我将以增量方式添加新范围: (0--4 and 5--6 and 7.12423--8) | ( 2--7) = (0--7 and 7.12423--8) 我真的不知道用什么语言来描述这一点,所以我正在努力搜索,但似乎已经存在一个类来完成我想做的事情。是吗?Python包索引中至少列出了两个处理时间间隔的包: 我以前试过interval,发现它写得很好,文档也写得很好(

我想表示一个任意复杂的实值范围,它可以是不连续的,即:

0--4 and 5--6 and 7.12423--8
我将以增量方式添加新范围:

(0--4 and 5--6 and 7.12423--8) | ( 2--7) = (0--7 and 7.12423--8)

我真的不知道用什么语言来描述这一点,所以我正在努力搜索,但似乎已经存在一个类来完成我想做的事情。是吗?

Python包索引中至少列出了两个处理时间间隔的包:

我以前试过
interval
,发现它写得很好,文档也写得很好(目前它的网站似乎不可用)。我没有使用
pyinterval

除了Ned提到的interval和pyinterval包之外,还有pyinter

由于pyinterval没有在我的机器上编译,我只玩interval和pyinter

前者对我来说似乎更好,因为它为区间集定义了加法和减法运算符,而pyinter没有。另外,当我试图计算两个离散点的并集时,它在interval中的效果与预期一样,但在pyinter中引发了AttributeError
(“'int'对象没有属性'overlaps'”)


pyinter的一个非常明显的区别是interval类的
\uu repr\uuuu
函数,它将输出
(7,9]
,而不是
interval(7,9,lower\u closed=False,upper\u closed=True)
(后者是interval包的表示)。虽然这对于快速交互工作很好,但闭合的间隔可能会与两个元素列表混淆。在这里,我也更喜欢间隔包的方法:它的表示形式不那么模棱两可,但另外定义了一个
\u str\u
方法,以便在调用
str()
print()时
在示例间隔上,它将输出为
(7..9)

为什么不自己实现它呢?这没什么大不了的。@Gabi--这是个糟糕的建议。如果不需要的话,千万不要重新发明轮子,除非这是一个学习练习,或者你能找到的唯一轮子是方形的。@autoculated我认为
numpy
有这样一个功能,但我现在不记得了。@agf这仍然没有用对他们来说是件大事me@agf---我最近注意到了你的东西,它的目标是正确的。包括上面的,+1。@Karl:我刚才在看模块v1.0.0的源代码,它似乎支持
间隔
,边界为
+/-inf
。根据描述,它支持连续范围,而不是连续范围不连续的。嗯,Interval支持连续范围的不连续集。这不是OP问题中的内容吗?Ack——很好的观点。现在的问题是,你能按时间间隔顺序迭代一个IntervalSet吗;有人必须阅读文档!:)@Ethan事实上,我很难决定在我的问题中使用连续还是不连续;@Ethan:
interval。模块v1.0.0中的IntervalSets
支持迭代。间隔按顺序存储,从最左边的下限开始,到最右边的下限。