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

在嵌套列表中移除停用词时触发list.remove(x):x not in list错误求助

问题分析与解决

错误原因

你的代码存在两个关键问题:

  • 操作对象错误:你试图从外层列表MM中移除子列表里的字符串j,但MM的元素是子列表(比如["s","mam"]),根本不存在单独的字符串元素,因此触发“元素不在列表中”的报错。正确的操作对象应该是当前遍历的子列表i,而非MM。
  • 遍历修改列表的隐患:就算改成i.remove(j),正序遍历子列表并删除元素时,会因列表长度变化导致部分元素被跳过(比如删除第一个元素后,后续元素前移,遍历索引会跳过下一个元素)。

正确实现方式

方式1:创建新列表(推荐,简洁安全)

用列表推导式直接生成过滤后的嵌套列表,避免遍历中修改原列表的问题:

stopwords = set(["s", "a", "about", "above"])
MM = [["s","mam"],["about","645"]]

# 过滤每个子列表中的停用词
filtered_MM = [[word for word in sublist if word not in stopwords] for sublist in MM]
print(filtered_MM)
# 输出: [['mam'], ['645']]

方式2:倒序遍历子列表删除元素

如果需要修改原列表,可以倒序遍历子列表(从后往前删),这样不会影响未遍历的元素位置:

stopwords = set(["s", "a", "about", "above"])
MM = [["s","mam"],["about","645"]]

for sublist in MM:
    # 倒序遍历索引,避免删除元素导致的遍历遗漏
    for idx in range(len(sublist)-1, -1, -1):
        if sublist[idx] in stopwords:
            del sublist[idx]

print(MM)
# 输出: [['mam'], ['645']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:50:22