Python列表索引越界(list index out of range)问题求助
咱们一步步拆解你遇到的list index out of range错误原因,然后搞定它:
错误根源分析
循环条件逻辑完全不对
你写的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会被不断更新,直到它超出数组的合法索引范围(要么变成负数,要么大于等于数组长度),触发索引越界错误。
- 当b是数组最后一个索引(也就是
缺少索引合法性检查
每次更新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
相关产品推荐
相关产品推荐

