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

Python列表索引越界(list index out of range)问题求助

咱们一步步拆解你遇到的list index out of range错误原因,然后搞定它:

错误根源分析

  1. 循环条件逻辑完全不对
    你写的while b< num -1 or b>0这个条件几乎永远为真:

    • 当b是数组最后一个索引(也就是num-1)时,b<num-1不成立,但只要b大于0,b>0就为真,循环会继续跑;
    • 如果b变成负数,b>0不成立,但负数肯定小于num-1(num是正整数),b<num-1就为真,循环还是停不下来。
      这种情况下,b会被不断更新,直到它超出数组的合法索引范围(要么变成负数,要么大于等于数组长度),触发索引越界错误。
  2. 缺少索引合法性检查
    每次更新b之后,你都没有验证新的b是否在0 ≤ b < len(num_array)这个区间内。不管数组元素是正还是负,只要更新后的b超出这个范围,访问num_array[b]就会报错。

修复后的代码

num_array = list()
num = int(raw_input("Enter how many elements you want:"))
print 'Enter numbers in array: '
for i in range(int(num)):
    n = raw_input("num :")
    num_array.append(int(n))
print 'ARRAY: ', num_array

b = 0
count = 0
max_steps = 1000  # 设置最大步数,防止出现无限循环的情况

# 循环条件:b在数组有效索引范围内,且未达到最大步数
while 0 <= b < len(num_array) and count < max_steps:
    count += 1
    current_val = num_array[b]
    if current_val != 0:
        b += current_val
    else:
        # 原逻辑等价于 b = b*2,这里保留你的写法
        b = (b + current_val) * 2

# 输出循环退出原因,方便调试
if not (0 <= b < len(num_array)):
    print f"循环退出:索引b={b}超出数组范围"
elif count >= max_steps:
    print "循环退出:达到最大允许步数,避免无限循环"
print f"总步数:{count}"

关键改动说明

  • 修正循环条件:改成判断b是否在合法索引区间,同时加了max_steps限制,防止因为数组元素导致b在合法索引里无限循环(比如数组是[1, -1],b会在0和1之间来回跳,永远不越界)。
  • 增加退出原因提示:循环结束后告诉你是因为越界还是触发了步数限制退出,方便你调试不同的输入场景。
  • 提取当前值到变量:把num_array[b]存到current_val里,避免重复索引访问,代码更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:04