You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python简单列表处理程序报错IndexError: list index out of range排查

问题原因及修复方案

核心错误原因

  • 索引取值逻辑错误
    你预先收集的comma_index_ask列表里存储的本身就是逗号在原字符列表中的索引值,比如输入a,b,c时这个列表为[1, 3]。循环中你写的comma_index_ask[item]相当于把原列表的索引值又当成了comma_index_ask的下标来取值,当item的值大于等于comma_index_ask的长度时就会触发索引越界。比如示例中第二次循环item=3,而comma_index_ask只有2个元素,最大下标是1,取comma_index_ask[3]直接报错。
  • 正序删除列表元素会导致索引偏移
    就算你把代码改成直接list.pop(item),也会出现错误。删除前面的元素后列表长度会变短,后面所有元素的索引都会自动减1,你按原列表收集的索引删后面的元素时,要么删错位置要么越界。比如原列表删了索引1的逗号后,原来索引3的逗号就移到了索引2的位置,你再按原索引3去删就会越界。
  • 额外不规范问题:你用了Python内置关键字list作为变量名,会覆盖原本的列表类型定义,建议改名避免后续出现隐性BUG。

修复方案

方案1:倒序删除逗号索引

倒序删除不会影响前面未删除元素的索引,同时直接使用收集到的索引值即可:

question = input(">")

def split_str(question):
    return [char for char in question]

char_list = split_str(question)
print(char_list)

comma_index_ask = [i for i in range(len(char_list)) if char_list[i] == ","]
print(comma_index_ask)

# 倒序遍历索引列表删除
for item in reversed(comma_index_ask):
    char_list.pop(item)

print(char_list)

方案2:直接过滤逗号(更简洁高效)

不需要先收集索引再删除,直接在生成字符列表时过滤掉逗号即可:

question = input(">")
char_list = [char for char in question if char != ","]
print(char_list)

内容的提问来源于stack exchange,提问作者Georgi Rumenov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:06:03