移除重叠区间 & 分割成非重叠区间 Python

问题描述 投票:0回答:1

我有一个排序的区间列表 List1:[1,10], [2,4], [6,8], [20,30], [24,28], [35,40], [45,50]

其中我知道,重叠的间隔是 List2: [2,4], [6,8], [24,28]

我想从其中得到非重叠的区间,这样的输出是。[1,2], [4,6], [8,10], [20,24], [28,30], [35,40], [45,50]

我如何在Python中高效地完成这个任务?

我的第一个想法是,我应该创建一个新的 list List1 遇到的每一个重叠的区间,我都会进行分割。List2的相应元素,并删除 List2 (继续这样做,直到 List2 是空的),但我一直有一些问题要解决。这似乎与许多区间问题的性质不同,所以任何建议都将是巨大的!

python intervals overlapping
1个回答
1
投票

我不知道这是否是最有效的方法,但对你来说可能是一个好的起点。

data = [[1, 10], [2, 4], [6, 8], [20, 30], [24, 28], [35, 40], [45, 50]]
flat_data = sorted([x for sublist in data for x in sublist])
new_intevals = [flat_data[i:i + 2] for i in range(0, len(flat_data), 2)]

print(new_intevals)
# output: [[1, 2], [4, 6], [8, 10], [20, 24], [28, 30], [35, 40], [45, 50]]
© www.soinside.com 2019 - 2024. All rights reserved.