迭代字符串时出现list index out of range错误的解决方法咨询
「list index out of range」错误(迭代字符串场景)解决方法
list index out of range 本质是你访问的索引值超出了序列的合法下标范围,字符串、列表这类序列的合法下标范围是 0 到 len(序列)-1,只要索引值不在这个区间就会触发该错误。
常见触发原因&对应解决方法
手动索引遍历边界设置错误
常见错误写法:循环边界多写了一位,比如
for i in range(len(s)+1)、while i <= len(s),最后一次循环的索引等于序列长度,超出合法范围。
解决方法:调整循环边界为小于等于len(s)-1,比如for i in range(len(s))、while i < len(s)。迭代过程中修改了原序列长度
如果迭代时你将字符串转为列表操作,中途执行了
pop()、remove()、del操作删除元素,会导致序列长度变短,但索引还是按原始长度遍历,就会触发越界。
示例错误代码:s_list = list("abcdef") for i in range(len(s_list)): if s_list[i] == 'd': s_list.pop(i)解决方法:
- 优先使用无索引迭代:直接按值遍历字符串
for char in s:,不需要手动维护索引,天然不会出现越界问题 - 必须修改原序列时选择倒序遍历:
for i in range(len(s_list)-1, -1, -1),倒序删除元素不会影响未遍历部分的索引 - 直接生成新序列:用列表推导式生成符合要求的新序列,不需要修改原序列,示例:
new_list = [char for char in s_list if char != 'd']
- 优先使用无索引迭代:直接按值遍历字符串
访问字符串拆分结果未做长度校验
如果你用
split()等方法拆分字符串后直接访问指定位置的下标,比如split_result[1],但拆分后的列表长度不足,就会触发越界。
解决方法:访问拆分结果的下标前先校验长度,比如确认len(split_result) >= 2后再访问下标1。
错误截图

内容的提问来源于stack exchange,提问作者HrugVed
相关产品推荐
相关产品推荐

