为了账号安全,请及时绑定邮箱和手机立即绑定

当索引处于 for 循环时,循环中的 Python 索引错误

当索引处于 for 循环时,循环中的 Python 索引错误

慕仙森 2022-01-05 10:24:14
我在创建的一个函数中遇到了一个非常奇怪的问题,该函数在类别中搜索单词,如果该单词不在类别中,则删除该类别。由于一些非常神秘的原因,我总是收到错误消息:list index out of range我明白这个错误意味着什么,但我无法理解为什么。我的代码如下:def check_cat(input, list_of_words, categories):"""if a word is not in the possible set of words of a class, cannot be in this class"""possible_cat = list_of_wordscategories_copy = categoriesfor j in range(len(list_of_words)):    for i in input:        if i not in list_of_words[j][:,1]:            possible_cat.pop(j)            categories_copy = np.delete(categories_copy,j)        else:            pass哪里categories = array(['culture', 'politics', 'sports'], dtype='|S8') 和list_of_words =    [array([['0.14285714285714285', 'ball'],            ['0.2857142857142857', 'cart'],            ['0.14285714285714285', 'drama'],            ['0.14285714285714285', 'opera'],            ['0.2857142857142857', 'theater']], dtype='|S32'),     array([['0.25', 'decision'],            ['0.5', 'drama'],            ['0.25', 'strategy']], dtype='|S32'),     array([['0.2857142857142857', 'ball'],            ['0.14285714285714285', 'cart'],            ['0.2857142857142857', 'goal'],            ['0.14285714285714285', 'player'],            ['0.14285714285714285', 'strategy']], dtype='|S32')]我真正不明白的是,当我在函数/无函数的“外部”执行代码时,它会起作用。但是通过一个函数,我得到了错误:    File "<ipython-input-110-b499e8f5d937>", line 7, in check_cat    if i not in list_of_words[j][:,1]:IndexError: list index out of range在我看来,索引 j 在 list_of_words 的范围内,因为我在其中循环......任何帮助将不胜感激。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我认为您的错误根源在于您的变量分配。当您在函数内部分配两个变量时,您实际上并没有创建副本,而是创建了指向原始 Python 对象的链接。因此,当您执行 pop 时,它实际上是在先读取 len 时减少原始长度,因此循环执行的次数比项目数多。


这是一篇很棒的文章,可以更深入地阅读我所解释的内容,并且是您必须牢记的事情之一,以避免未来的陷阱。


至于你的问题,我通过一个小的更改停止了错误,我复制了输入而不是使用.copy().


possible_cat = list_of_words.copy()

categories_copy = categories.copy()

希望这可以解决问题,这就是您要寻找的。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信