Python 有不连续范围类吗?

8 投票
2 回答
2314 浏览
提问于 2025-04-16 23:49

我想表示一个可以非常复杂的实数范围,这个范围可能是不连续的,也就是说:

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)

我其实不知道用什么合适的词来描述这个,所以我在搜索的时候遇到了困难。不过,看起来可能已经有一个类可以实现我想要的功能。有没有这样的类呢?

2 个回答

2

除了Ned提到的intervalpyinterval这两个包,还有一个叫pyinter的包。

因为pyinterval在我的电脑上无法编译,所以我只试用了intervalpyinter

我觉得interval更好一些,因为它为区间集合定义了加法和减法运算符,而pyinter没有这个功能。而且当我尝试计算两个离散点的并集时,interval的表现如我所预期的那样,但在pyinter中却出现了AttributeError ("'int' object has no attribute 'overlaps'")的错误。

一个很明显的区别是pyinter的区间类的__repr__函数输出的是(7,9],而不是Interval(7, 9, lower_closed=False, upper_closed=True)(后者是interval包的表示方式)。虽然这样在快速交互时很方便,但闭区间可能会和两个元素的列表混淆。在这方面,我更喜欢interval包的处理方式:它的表示方式不那么模糊,而且还定义了__str__方法,这样当你调用str()print()来打印示例区间时,它会输出(7..9]

6

在Python的包索引中,至少有几个处理区间的包:

我之前试过interval这个包,觉得它写得很好,文档也很清晰(不过现在它的网站似乎无法访问)。我没有使用过pyinterval

撰写回答