如何编写Python函数实现整数左闭右开区间的全拆分?
实现整数左闭右开区间的全分段生成函数
需求说明
所有区间均为整数型左闭右开区间,内部区间始终包含在全局区间内。给定全局区间[0,22[与内部区间[3,6[、[12,15[,需要生成覆盖所有分段的区间列表:[0,3[ ∪ [3,6[ ∪ [6,12[ ∪ [12,15[ ∪ [15,22[,对应元组格式为[(0, 3), (3, 6), (6, 12), (12, 15), (15, 22)]。
修复后的函数实现
def allspans(r, spans): # 按内部区间左端点排序,兼容无序输入场景 sorted_spans = sorted(spans, key=lambda x: x[0]) result = [] current_start = r[0] for s_start, s_end in sorted_spans: # 填补当前起点到内部区间左端点的空隙段 if current_start < s_start: result.append((current_start, s_start)) # 加入内部区间本身 result.append((s_start, s_end)) current_start = s_end # 补上最后一段:内部区间终点到全局区间终点 if current_start < r[1]: result.append((current_start, r[1])) return result # 测试示例 print(allspans((0, 22), [(3,6), (12,15)])) # 输出:[(0, 3), (3, 6), (6, 12), (12, 15), (15, 22)]
核心逻辑说明
- 排序内部区间:避免输入的内部区间无序导致分段混乱,确保按从左到右的顺序处理。
- 逐段衔接:从全局区间左端点开始,依次衔接每个内部区间的前后端点,自动填补空隙段。
- 收尾处理:遍历完所有内部区间后,补上最后一段(内部区间最右端到全局区间右端)。
常见错误原因
之前的索引遍历出错,大概率是因为未对内部区间排序,或者硬编码索引导致漏处理空隙段、越界访问,比如直接按固定索引取区间端点,忽略了输入可能无序或存在多个空隙的情况。
内容的提问来源于stack exchange,提问作者dude
相关产品推荐
相关产品推荐

