Python 删除重叠的间隔&;划分为不重叠的间隔

Python 删除重叠的间隔&;划分为不重叠的间隔,python,intervals,overlapping,Python,Intervals,Overlapping,我有一个已排序的间隔列表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中高效地执行此操作 我的第一个想法是,我应该为我在List2中遇到的每个重叠间隔创建一个新的划分间隔列表List1,并删除List2

我有一个已排序的间隔列表
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中高效地执行此操作


我的第一个想法是,我应该为我在
List2
中遇到的每个重叠间隔创建一个新的划分间隔列表
List1
,并删除
List2
的相应元素(继续此操作,直到
List2
为空),但我一直很难让它正常工作。这在本质上似乎与许多间隔问题不同,所以任何建议都是非常好的

我不知道这是否是最有效的方法,但这可能是您的一个良好起点:

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]]