Python中追加其他列表时为何会修改无关列表并报索引越界错误
问题根因
你遇到的索引越界和其他列表的append操作完全无关,问题出在两个逻辑错误上:
- 第一,Python列表的索引从0开始,
len(trueDataList)返回的是列表元素总数,合法索引范围是0 ~ len(trueDataList)-1,你写的while dataLoopVar <= dataLoopMax的判断条件本身就允许索引等于列表长度,这已经超出合法范围了。 - 第二,你每次while循环内会连续读取6个索引位置,每次读取后索引+1,也就是单次循环索引总共会加6,这要求
trueDataList的长度必须是6的整数倍,只要长度不满足这个条件,循环到末尾必然会出现索引越界。
修正方案
你可以按照下面的逻辑修改代码:
dataLoopVar = 0 # 先校验长度是否符合要求 if len(trueDataList) % 6 != 0: # 这里可以加异常抛出或者日志提示,避免后续越界 raise ValueError("trueDataList的长度必须是6的整数倍") dataLoopMax = len(trueDataList) # 循环条件改成小于长度 while dataLoopVar < dataLoopMax: studentList.append(trueDataList[dataLoopVar]) dataLoopVar += 1 districtList.append(trueDataList[dataLoopVar]) dataLoopVar += 1 lunchList.append(trueDataList[dataLoopVar]) dataLoopVar += 1 sportList.append(trueDataList[dataLoopVar]) dataLoopVar += 1 statusList.append(trueDataList[dataLoopVar]) dataLoopVar += 1 nList.append(trueDataList[dataLoopVar]) dataLoopVar += 1
如果你的数据逻辑是每6个元素为一组对应不同列表的一条记录,也可以用更简洁的批量分组写法,避免手动维护索引:
# 每6个元素分为一组 for group in [trueDataList[i:i+6] for i in range(0, len(trueDataList), 6)]: if len(group) < 6: continue # 跳过不完整的分组,或者按需求处理 s, d, lu, sp, st, n = group studentList.append(s) districtList.append(d) lunchList.append(lu) sportList.append(sp) statusList.append(st) nList.append(n)
内容的提问来源于stack exchange,提问作者BigMozzaMan
相关产品推荐
相关产品推荐

