Python列表索引越界问题求助:模拟备考代码报错排查
问题分析与代码修正
错误原因
- 列表初始化错误:
[] * q无法创建长度为q的列表,空列表乘以任何数值结果仍是空列表,导致qList、sList始终为空,后续通过索引赋值时直接触发越界错误。 - 随机索引范围错误:
randint(0, len(qList))会生成包含len(qList)的整数,而列表的最大有效索引是len(qList)-1,访问qList[x]必然越界。 - 列表元素添加方式错误:Python不允许直接给空列表/长度不足的列表通过索引赋值(如
sList[i] = ...),必须使用append()方法添加元素。 - 逻辑与拼写错误:pList的循环用索引i匹配问题编号,逻辑完全错误;
apppend是拼写错误,正确写法为append。
修正后的代码
import random # 自定义总题数和复习题数 q = 10 s = 5 # 问题列表:生成1到q的所有题目编号 qList = [i + 1 for i in range(q)] # 已复习问题列表:随机从qList中选s个题目 sList = [] for _ in range(s): # 直接选元素避免索引操作错误 question = random.choice(qList) sList.append(question) # 若需复习不重复题目,取消下面两行注释 # qList.remove(question) # q -= 1 # 通过问题列表:此处默认复习过的题目都通过,可按需调整逻辑 pList = sList.copy() # 输出结果 print("问题列表:", qList) print("已复习问题列表:", sList) print("通过问题列表:", pList)
代码说明
- 问题列表
qList:用列表推导式直接生成目标编号,避免初始化阶段的错误。 - 已复习列表
sList:用random.choice()直接选取元素,无需手动处理索引,彻底规避越界风险;如果需要保证复习题目不重复,可启用注释部分的移除逻辑。 - 通过列表
pList:此处采用“复习即通过”的简单逻辑,你可以根据需求修改(比如按比例随机筛选通过题目)。
内容的提问来源于stack exchange,提问作者Ray Favaza
相关产品推荐
相关产品推荐

