如何修复Python代码中引发IndexError的列表索引越界问题?
修复列表索引越界(IndexError)问题
首先,咱们来定位问题的根源:你的v_leader列表初始是空的,而你直接通过索引(比如v_leader[n]、v_leader[n-1])去访问或赋值,这必然会触发IndexError——因为空列表里根本没有这些位置的元素。Python的列表不会自动扩容到你指定的索引位置,必须通过append()这类方法来添加元素,或者提前初始化足够长度的列表。
另外你的代码还有几个逻辑小问题,比如第一个循环里的i += i会让时间戳指数增长,这显然不符合你模拟速度变化的预期,应该是i += t_s来逐步累加时间。
下面是修复后的完整代码,我会逐一解释修改点:
v_leader = [] v_follower = [] distance = [] # 先初始化leader的初始速度,这里假设初始速度为0,你可以根据需求调整 v_leader.append(0) t_s = float(input("Enter the value of the time stamp: ")) r_t = float(input("Enter the value of the reaction time: ")) i = t_s n = 1 # 第一个循环:模拟leader加速阶段 while i < 12.5: # 用append添加新的速度值,而不是直接索引赋值 next_speed = v_leader[n-1] + 8 * t_s v_leader.append(next_speed) # 修正时间累加逻辑,改为每次加时间戳t_s i += t_s n += 1 # 第二个循环:模拟leader匀速阶段(10个时间单位) m = n for _ in range(10): # 延续上一个速度,append到列表 v_leader.append(v_leader[-1]) m += 1 # 第三个循环:模拟leader减速阶段(10个时间单位) for _ in range(10): # 计算减速后的速度,append到列表 next_speed = v_leader[-1] - 10 * t_s v_leader.append(next_speed) print(v_leader)
关键修改说明:
- 初始化列表元素:一开始给
v_leader添加了初始速度(这里设为0,你可以根据实际需求修改),这样后续才能访问v_leader[n-1]获取前一个速度值。 - 用
append()添加元素:所有新的速度值都通过append()添加到列表末尾,避免了直接索引赋值导致的越界问题,同时自动维护列表长度。 - 修正时间累加逻辑:把
i += i改成i += t_s,让时间按设定的时间戳逐步增长,符合速度模拟的逻辑。 - 简化循环结构:把后面的嵌套while循环改成更清晰的for循环,减少变量混乱,逻辑更易读。
这样修改后,代码就不会再触发IndexError,同时逻辑也更符合模拟速度变化的预期。
内容的提问来源于stack exchange,提问作者uv333
相关产品推荐
相关产品推荐

