Python 'list index out of range'错误的常见修复方案
GC含量检测程序越界错误修复
原代码共存在1处直接触发报错的问题、2处逻辑错误,具体修复点如下:
- 索引越界修复:Python序列索引从0开始,有效索引最大值为
len(序列)-1,原循环条件while m <= len(g)会访问不存在的g[len(g)]位置触发报错,需修改为while m < len(g)。 - 计数逻辑修复:原代码将
countA/countT/countC/countG四个计数器放在while循环内初始化,每遍历一个碱基就会重置之前的计数,最终仅能统计最后一个碱基的数量,GC含量计算结果完全错误,需将计数器初始化移动到while循环外侧、单条序列遍历的起始位置。 - 返回逻辑修复:原代码将
return new_z写在for循环内部,处理完第一条序列就会终止函数,后续序列不会被执行检测,需将return语句移动到for循环外侧,待所有序列处理完成后再返回结果。
修复后完整代码
def test_gc(z): new_z = [] for g in z: m = 0 countC = 0 countA = 0 countG = 0 countT = 0 # 修正循环边界,避免索引越界 while m < len(g): if g[m] == "C": countC += 1 elif g[m] == "A": countA += 1 elif g[m] == "G": countG += 1 elif g[m] == "T": countT += 1 m += 1 total_base = countG + countC + countA + countT # 跳过空序列避免除零错误 if total_base == 0: continue gccontent = ((countG + countC) / total_base) * 100 if 40 < gccontent < 60: new_z.append(g) # 所有序列处理完成后再返回结果 return new_z
补充优化:新增空序列校验,避免传入空序列时触发除零报错;将原else分支统计T改为显式匹配T碱基,避免非法字符被误统计为T影响结果准确性。
内容的提问来源于stack exchange,提问作者Liam Conroy
相关产品推荐
相关产品推荐

