要将一组重叠范围转换为非重叠范围?

时间:2014-04-25 12:47:20

标签: python algorithm range

考虑一下这个例子:

a = [[95.958, 101.566], [117.665, 121.995], [138.909, 153.961],
     [154.529, 252.391], [229.633, 232.087], [268.995, 269.266],
     [269.432, 283.028], [286.432, 364.575], [366.179, 437.013],
     [446.27, 601.232], [585.713, 1374.37], [1287.678, 2464.882], 
     [2273.926, 5218.017]]

基于以上数组元素

[446.27, 601.232], [585.713, 1374.37], 
[1287.678, 2464.882], [2273.926, 5218.017]

这些彼此重叠。因此,从非重叠范围来看,这些元素成为单个元素

[446.27, 5218.017]

所以最终的数组将成为

a = [[95.958, 101.566], [117.665, 121.995], [138.909, 153.961],
     [154.529, 252.391], [229.633, 232.087], [268.995, 269.266], 
     [269.432, 283.028], [286.432, 364.575], [366.179, 437.013],
     [446.27,5218.017]]

如果有人可以建议在python中执行此操作的代码,那会有帮助吗?

1 个答案:

答案 0 :(得分:0)

让您的left手和right手一次引用一个项目,并为合并结果引用output列表。

  1. 从序列中的第一个元素开始,使用left手选择它。
  2. right手中选择下一个。
  3. 检查您的left手牌是否与right手牌重叠:
    • 如果它们重叠,请将left手与right手合并,并将其与left手保持一致
    • 如果没有重叠,请将left手牌添加到output列表中,然后将right手移至left手。
  4. 转到2直到不再有物品剩余。
  5. 如果您的left手牌中有项目,请将其添加到output