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

Python编辑列表嵌套容器时remove方法报ValueError问题排查

错误原因

你的代码存在两处逻辑问题,直接触发了找不到删除对象的报错:

  • 操作对象完全错配:你遍历的是my_list[0]这个子列表内的整数元素(也就是123、1、3),但调用remove()方法时是在外层的my_list上执行的。外层my_list存储的元素是两个子列表[123,1,3]、[258,9,7],根本不存在整数123这个元素,自然会抛出x not in list的错误。
  • 遍历列表的同时直接修改原列表本身是Python的常见坑:哪怕你把remove的调用对象改对了,直接在for循环遍历原列表时删除元素,会导致列表索引实时错位,后续遍历会跳过元素、甚至触发索引异常。
正确写法

最简洁稳妥的方式是用列表推导式过滤后直接替换原子列表,完全避开遍历修改的问题:

# 过滤掉my_list[0]中所有大于100的值,替换原位置的子列表
my_list[0] = [num for num in my_list[0] if num <= 100]

执行后原来的my_list[0] = [123,1,3]会被替换为[1,3],符合过滤需求。

如果你一定要用循环+remove的逻辑,必须满足两个要求:一是在要修改的子列表本身调用remove,二是遍历原列表的副本,避免索引错位:

# 遍历子列表的浅拷贝,在子列表上执行删除操作
for num in my_list[0].copy():
    if num > 100:
        my_list[0].remove(num)

这种写法运行结果和列表推导式一致,但执行效率更低,日常使用更推荐列表推导式的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.16 16:15:41