Python新手求助:generate_distribution函数运行报索引越界错误的原因?
错误原因
- 空列表索引访问错误:你初始化
new_list = []为空列表,循环第一次执行时i=0,直接访问new_list[i-1]也就是new_list[-1],空列表没有任何有效索引,直接触发越界错误。 - 逻辑偏差错误:从代码上下文判断,你应该是要生成一个长度为
size的一维列表,每个位置填充对应数值,但你现在把.append()方法作用在new_list[i-1]上,相当于默认new_list是二维列表,和需求逻辑不符,就算解决空列表问题后续也会报错。 - 边界值潜在风险:你把两个分布参数乘100转成整数,没有校验两个分布参数之和是否超过1,比如
distribution_negative=0.6、distribution_positive=0.5的场景下,x+y=110,如果size小于110也会出现逻辑异常。
修复后的代码
def generate_distribution(size, distribution_positive, distribution_negative): x = int(distribution_negative * 100) y = int(distribution_positive * 100) # 可选:增加参数合法性校验 if x + y > 100: raise ValueError("正负样本分布占比之和不能超过1") new_list = [] for i in range(size): if i < x: new_list.append(-1) elif x <= i < x + y: new_list.append(1) else: new_list.append(0) return new_list
补充说明
- 如果你确实需要生成二维列表,请先初始化
new_list的每一个子元素为空白列表,示例:new_list = [[] for _ in range(行数)],再访问对应索引的子列表执行append操作。 - 如果对分布占比精度要求较高,建议不要直接用
int()截断,可以用四舍五入等方式处理,避免占比误差过大。
内容的提问来源于stack exchange,提问作者Osmani
相关产品推荐
相关产品推荐

