python中关于‘IndexError: list index out of range’的问题

在编写代码时遇到了IndexError: list index out of range这样的报错。
上网查阅得知出现此问题的原因是因为访问的是空列表或者是长度超过了列表长度。但我觉得我的问题不是这两个中的任何一个。
以下为问题代码:

import jieba
f = open('data.txt','r',encoding = 'utf-8')
fo = open('clean.txt','w')
txt = f.read()
bd = [',','。','、','(',')','—',' ','|',':',';','“','”']
s = ''
i = jieba.lcut(txt)
for j in range(len(i)):
  if i[j] in bd:
        i.pop(j)
fo.write(s)
f.close()
fo.close()


之所以我这样认为是因为当我将代码中的‘ i.pop(j) ’改为print(i[j])时,代码可以正常运行,这令我很困惑,希望有佬解答一下
感谢感谢!

  • 下标引用溢出错误
    随着您的不断i.pop(),您的i在不断缩短;而您的j会遍历轮询到原长度的下标,到后面毕然会报“下标引用溢出错误”。
  • 您不是就想剔除jieba分词后的标点字符么,直接用列表解析+if条件筛选,比用i.pop()效率更高

    img

代码

#!/sur/bin/nve python
# coding: utf-8

txt = '''这里 有 两个 注意 点 :
(1)不能 将 客户端 最小化 。
(2)不能 将 客户端 缩小 到 后台 运行 的 小菜单 。

因为 , 如果 放到 最小化 时 , 它 实际上 是 读取 不 到 客户端 的 信息 的 ,这点 在 测试 时候 需要 特别注意 。'''.split()
bd = [',','。','、','(',')','—',' ','|',':',';','“','”', '\n',':']
out_txt = [i for i in txt if i not in bd]
print(f"\n输入列表:{txt}\n\n输出列表:{out_txt}\n") 


【以下回答由 GPT 生成】

解决方案:

为了解决这个问题,你可以尝试以下步骤:

  1. 确认代码中列表 i 的长度是否大于等于 j 的值。你可以使用 print(len(i)) 语句来检查列表的长度。
print(len(i))

如果列表的长度小于 j 的值,那么意味着你在遍历的过程中已经删掉了列表的元素,导致索引超出范围。

  1. 如果列表 i 的长度小于 j 的值,则可能是 pop() 操作导致的错误。你可以尝试使用 print(i) 语句来查看列表 i 的内容。
print(i)

这样可以帮助你查看列表 i 的实际内容,确认是否有问题。

  1. 如果列表 i 的长度大于等于 j 的值,那么问题可能出在其他地方。你可以使用 try-except 块来捕获错误并输出更详细的错误信息,例如:
try:
    # 你的代码
except IndexError:
    print("发生了'IndexError: list index out of range'错误")

这样可以帮助你更精确定位问题所在。

希望这些提示能够帮助到你解决问题。如果你有任何进一步的疑问,请随时提问!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^