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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:15