遍历列表使用迭代索引为字典新增key时出现List index out of range错误
报错原因
触发IndexError的核心是遍历循环的次数设置错误:
- 你当前使用的循环语句
for z in range(0,len(rawskudata)),会按照rawskudata的总元素个数执行循环。但你的逻辑是每轮循环需要消耗4个元素,实际循环次数仅需要为总元素数/4即可。 - 以你提供的
rawskudata输出为例,总长度为20,共5组数据,仅需要循环5次即可处理完成。但原代码会循环20次,第6次循环时访问的索引就已经超过了列表的最大下标,直接触发报错。 - 冗余细节:代码中
int(c_sku)这类转换没有必要,c_sku本身就是整数类型,可直接使用。
解决方法
方案1:最小改动修复原代码
仅修改循环的终止条件,将循环次数改为总组数即可:
# 原循环删除,替换为下面的代码 for z in range(len(rawskudata) // 4): c_list = "componant" + str(c_tag) skuandimages[c_list] = [rawskudata[c_sku], rawskudata[c_img_url], rawskudata[c_name], rawskudata[c_quantity]] c_sku = c_quantity + 1 c_img_url = c_quantity + 2 c_name = c_quantity + 3 c_quantity = c_quantity + 4 c_tag += 1
方案2:更简洁的优化写法
不需要手动维护4个索引变量,直接按步长4遍历列表即可,代码更简洁不易出错:
skuandimages = {} for idx, start in enumerate(range(0, len(rawskudata), 4)): skuandimages[f"componant{idx}"] = rawskudata[start:start+4]
内容的提问来源于stack exchange,提问作者andrr
相关产品推荐
相关产品推荐

