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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:05:48