Python中如何根据起止索引列表生成互补索引区间?
生成互补区间的Python实现
实现思路
- 先对输入的区间列表按起始值排序(避免输入区间乱序导致错误)
- 初始化互补区间的起始点为绝对区间的最小值(这里是1)
- 遍历每个输入区间:
- 若当前互补起始点小于输入区间的起始值,说明两者之间存在空白区间,将其加入结果列表
- 更新互补起始点为当前输入区间的终点 + 1
- 遍历结束后,若互补起始点仍小于等于绝对区间的最大值(这里是120),将剩余区间加入结果
代码实现
def generate_complementary_intervals(input_intervals, min_val=1, max_val=120): # 按区间起始值排序 sorted_intervals = sorted(input_intervals, key=lambda x: x[0]) complementary = [] current_start = min_val for start, end in sorted_intervals: if current_start < start: complementary.append([current_start, start - 1]) # 更新当前起始点为当前区间结束+1,若当前区间结束超过max_val则直接截断 current_start = max(current_start, end + 1) # 提前终止:当前起始点已经超过最大值,无需继续遍历 if current_start > max_val: break # 处理最后一段剩余区间 if current_start <= max_val: complementary.append([current_start, max_val]) return complementary # 测试示例 input_intervals = [[1,10], [20,45]] print(generate_complementary_intervals(input_intervals)) # 输出:[[11, 19], [46, 120]]
额外测试场景
- 输入区间包含绝对区间起点:比如输入
[[5,20]],输出[[1,4], [21,120]] - 输入区间包含绝对区间终点:比如输入
[[100,120]],输出[[1,99]] - 输入区间有重叠:比如输入
[[1,15], [10,20]],排序后会自动合并逻辑,输出[[21,120]]
内容的提问来源于stack exchange,提问作者rchat33
相关产品推荐
相关产品推荐

