我使用了模块间隔(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])
答案 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不是我的主要语言。