列表推导式实现列表除法遇零值报错问题求助
问题解决
错误原因
你的代码存在两个核心问题:
- 索引类型错误:
if time_diff[i] > 0里的i是distance[1:]的元素(大概率是浮点数类型的距离值),用浮点数作为列表索引会直接触发TypeError——列表索引只能是整数或切片。 - 计算逻辑颠倒:速度的计算公式是「距离差 ÷ 时间差」,但你
zip(distance[1:], time_diff[:-1])的顺序把时间差和距离差搞反了,实际计算的是「时间差 ÷ 距离差」,这不是速度值。
修正后的代码
方案1:过滤掉时间差为0的情况
直接判断当前的时间差元素是否大于0,同时调整zip顺序保证计算逻辑正确:
velocity = [j / i for i, j in zip(time_diff[:-1], distance[1:]) if i > 0]
方案2:保留位置,用默认值标记无效数据
如果不想过滤元素,而是用特定值(比如NaN)标记时间差为0时的无效速度,可以这样写:
import math velocity = [j / i if i > 0 else math.nan for i, j in zip(time_diff[:-1], distance[1:])]
内容的提问来源于stack exchange,提问作者JaredCusick
相关产品推荐
相关产品推荐

