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

为什么处理NLTK停用词的for循环无限循环,普通遍历却不会?

无限循环问题原因解析

核心原理

Python 使用for循环遍历列表这类可变序列时,会维护一个隐式的递增索引:每轮循环按当前索引取列表元素,索引自动加1,直到索引值大于等于列表当前的总长度时,循环才会终止。

第一段代码无限循环的原因

两个关联错误共同导致了无限循环:

  • 遍历的目标列表word_tok和你追加元素的列表是同一个对象,每次命中「非停用词」条件时,word_tok.append(i)会给原列表末尾新增元素,导致列表总长度持续变大
  • 你追加的元素都是满足i not in stopWords的非停用词,后续遍历到这些新追加的元素时,会再次触发追加逻辑,循环永远无法触发终止条件

第二段代码正常运行的原因

第二段代码仅遍历读取word_tok的元素,全程没有修改word_tok的长度,当隐式索引走到列表初始长度的位置时,循环就会正常结束,自然不会出现无限循环问题。

正确的筛选写法

你原本的需求是把非停用词存入wordClear列表,只需要修改追加的目标列表即可:

wordClear=[]
for i in word_tok:
      if i not in stopWords:
        # 把元素追加到结果列表,不是原来的分词列表
        wordClear.append(i)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:09:04