You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于mrg2pairs函数的多对pair合并排序Python优雅实现

基于现有mrg2pairs的批量合并实现

实现前置逻辑

要做批量合并,首先必须解决原始列表顺序随机的问题:

  • 先把所有pair按左端点(每个pair的第一个值)做升序排序,这是所有后续合并操作的基础——排序后所有可能需要合并的pair都会在序列上相邻出现,不需要反复回溯遍历已处理的元素。
  • 全程不改动你已经通过测试的mrg2pairs内部判断规则,直接复用双pair的合并能力,避免引入新的逻辑漏洞。
  • 优先用迭代实现替代递归:Python默认递归深度有限,处理稍长的列表就容易触发栈溢出报错,迭代方式更稳定。

完整可运行代码

def merge_pairs(pair_list):
    # 空列表直接返回
    if not pair_list:
        return []
    # 按pair的左端点排序,消除原始随机顺序的影响
    sorted_pairs = sorted(pair_list, key=lambda item: item[0])
    merged_result = [sorted_pairs[0]]
    
    for current_pair in sorted_pairs[1:]:
        # 取出已合并结果里的最后一个元素,和当前遍历到的pair做合并
        last_merged = merged_result.pop()
        merge_output = mrg2pairs(last_merged, current_pair)
        # 把合并后的结果写回列表
        merged_result.extend(merge_output)
    return merged_result

效果校验

针对你给出的示例输入:

lst = [[1, 4], [17, 20], [2, 3], [16, 18], [6, 6], [6, 7], [9, 13], [21, 24]]
print(merge_pairs(lst))
# 输出完全匹配期望:[[1, 4], [6, 7], [9, 13], [16, 24]]

实现说明

  • 整体时间复杂度由排序步骤决定,为O(n log n),是区间合并问题的最优效率,没有多余的遍历开销
  • 完全遵循你定义的所有合并规则:重叠合并、端点相接合并、间隔超过1的相邻区间不合并,没有改动原有mrg2pairs的判断阈值
  • 代码没有多余的抽象,逻辑直白易维护,符合Python社区的简洁实现风格

补充说明:如果后续需要调整“相邻”判定的阈值,只需要改动原有mrg2pairs里的判断条件即可,批量合并的外层逻辑完全不需要改动。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 14:45:03