【问题标题】:Remove Overlapping Intervals & Divide into Non-overlapping Intervals Python删除重叠区间并划分为非重叠区间 Python
【发布时间】:2020-05-29 18:13:58
【问题描述】:

我有一个排序的间隔列表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为空),但我在让它工作时遇到了一些麻烦。这在本质上似乎与许多区间问题不同,所以任何建议都会很棒!

【问题讨论】:

    标签: python intervals overlapping


    【解决方案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]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多