def add_region(self, reg):
""" Adds single region to set while removing overlap """
# in case not given as named tuple
region = Region(reg[0], reg[1])
# find where this region should go
start_index = bisect.bisect_left(self.starts, region.start)
end_index = bisect.bisect_left(self.ends, region.end)
# merge if required
if start_index > 0 and self.ends[start_index-1] > region.start:
region = Region(self.starts[start_index-1], region.end)
start_index -= 1
if end_index < len(self.starts) and self.starts[end_index] < region.end:
region = Region(region.start, self.ends[end_index])
end_index += 1
# if no merge, insert this region in the lists
if start_index == end_index:
self.starts = self.starts[:start_index] + [region.start] + self.starts[start_index:]
self.ends = self.ends[:start_index] + [region.end] + self.ends[start_index:]
else:
self.starts = self.starts[:start_index] + [region.start] + self.starts[end_index:]
self.ends = self.ends[:start_index] + [region.end] + self.ends[end_index:]
评论列表
文章目录