我有一个排序的区间列表 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
是空的),但我一直有一些问题要解决。这似乎与许多区间问题的性质不同,所以任何建议都将是巨大的!
我不知道这是否是最有效的方法,但对你来说可能是一个好的起点。
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]]