如何在python中加入整数区间?

时间:2016-08-09 22:15:39

标签: python intervals

我使用了模块间隔(http://pyinterval.readthedocs.io/en/latest/index.html

并从set或start,end元组创建一个间隔:

intervals = interval.interval([1,8], [7,10], [15,20])

与[1,8]和[7,10]重叠的区间([1.0,10.0],[15.0,20.0])的结果重叠。

但是这个模块将对的值解释为实数,因此整数中的两个连续区间不会连接在一起。

示例:

intervals = interval.interval([1,8], [9,10], [11,20]) 

结果:间隔([1.0,8.0],[9.0,10.0],[11.0,20.0])

我的问题是如何将这个区间作为整数而不是实数加入?在最后一个例子中,结果将是interval([1.0,20.0])

4 个答案:

答案 0 :(得分:1)

interval模块pyinterval用于实数,而不是整数。如果要使用对象,可以创建整数间隔类,也可以使用间隔模块对程序进行编码以加入整数间隔:

def join_int_intervlas(int1, int2):
    if int(int1[-1][-1])+1 >= int(int2[-1][0]):
        return interval.interval([int1[-1][0], int2[-1][-1]])
    else:
        return interval.interval()

答案 1 :(得分:0)

我想出了以下程序:

ls = [[1,8], [7,10], [15,20]]
ls2 = []
prevList = ls[0]
for lists in ls[1:]:
    if lists[0] <= prevList[1]+1:
        prevList = [prevList[0], lists[1]]
    else:
        ls2.append(prevList)
        prevList = lists
ls2.append(prevList)

print ls2 # prints [[1, 10], [15, 20]]

它通过所有列表进行置换,并检查每个列表的第一个元素是否小于或等于前一个元素+ 1.如果是,它会使两个元素结合。

答案 2 :(得分:0)

我相信你也可以通过添加interval([-0.5, 0.5])来使用pyintervals作为整数区间。用你的例子得到

In[40]:  interval([1,8], [9,10], [11,20]) + interval([-0.5, 0.5])
Out[40]: interval([0.5, 20.5])

答案 3 :(得分:0)

这需要一个元组列表,例如 [HttpPost] public ActionResult Create(Sound model, HttpPostedFileBase postedFile) { //do stuff }

l = [(25,24), (17,18), (5,9), (24,16), (10,13), (15,19), (22,25)]

Ben Voigt对A container for integer intervals, such as RangeSet, for C++的回答中概述了这个想法

Python不是我的主要语言。