代码之家  ›  专栏  ›  技术社区  ›  tanmay

如何检查列表中的元素是否具有重叠的数值

  •  1
  • tanmay  · 技术社区  · 3 年前

    我正在处理一个列表,其中一些项具有重叠值。

    list=[[7, 11, 'Feature01'],
          [2, 6, 'Feature02'],
          [31, 59, 'Feature03'],
          [31, 41, 'Feature04'],
          [20, 40, 'Feature05'],
          [25, 30, 'Feature06']
    

    例如,在以下项目中,Feature04位于Feature03坐标内。

    [31, 59, 'Feature03'], [31, 41, 'Feature04'], 
    

    类似地,在下面的示例中,Feature06位于Feature05坐标内。

    [20, 40, 'Feature05'], [25, 30, 'Feature06']
    

    在这种重叠场景中,我只想保留一个项目,并更新原始/主列表以保存非重叠列表项目。

    我发现几乎相似 question 但无法使其工作。

    提前感谢

    1 回复  |  直到 3 年前
        1
  •  1
  •   BrokenBenchmark Miles Budnek    3 年前

    按间隔的起点对列表进行排序,根据间隔的端点进行分段(按降序排列)。然后,如果最近添加的间隔未包含在结果中,则添加一个间隔:

    lst.sort(key=lambda x: (x[0], -x[1]))
    result = [lst[0]]
    
    for entry in lst[1:]:
        current_start, current_end, _ = entry
        last_start, last_end, _ = result[-1]
        if not (last_start <= current_start <= current_end <= last_end):
            result.append(entry)
            
    print(result)
    

    这将输出:

    [[2, 6, 'Feature02'], [7, 11, 'Feature01'], [20, 40, 'Feature05'], [31, 59, 'Feature03']]