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

Python中while→else→while嵌套结构未触发外层终止报IndexError问题

问题根因
  • 外层while k>j的判断仅会在每次外层循环启动时执行一次,你在内层嵌套的while中修改k、j的值时,不会触发外层的判断校验,所以即使k已经小于等于j,内层循环仍会继续执行。
  • 内层while循环没有增加边界校验逻辑,仅判断了数组元素相等的条件,当k不断减小到0后,仍会执行nums[k-1]访问索引为-1的元素,直接触发越界错误,你提供的运行日志中k已经降到-2也验证了这点。
解决方案

在内层while的判断条件中优先增加边界校验,确保数组索引不会超出合法范围:

  1. 处理k的内层循环增加k>j的前置判断,保证k不会降到小于等于j,同时避免k-1为负数
  2. 处理j的内层循环增加j<k的前置判断,保证j不会升到大于等于k,同时避免j+1超出数组最大索引

修改后的完整代码如下:

nums=[0,0,0]
i=0
j=i+1
k=len(nums)-1
while(k>j):               
    s=nums[i]+nums[j]+nums[k]
    #greater than 0
    if s>0:    
        # 注意:原代码此处如果没有修改k/j的逻辑,遇到s>0的场景会触发死循环,请补充对应业务逻辑
        k -= 1
    else:
        #do something
        # 增加k>j的边界判断
        while k>j and nums[k]==nums[k-1]:
            print("2nd while ",k,j)
            k-=1
        k-=1
        # 增加j<k的边界判断
        while j<k and nums[j]==nums[j+1]:
            j+=1
        j+=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:48:03