基于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
相关产品推荐
相关产品推荐

