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

Python列表过滤字符串异常:代码执行结果不符合预期求助

问题原因分析

你遇到的问题是因为在遍历列表的同时直接修改原列表,导致迭代器的索引错位。具体过程:

  • 初始列表是[1,2,'a','b'],迭代器依次访问索引0(1)、1(2)、2('a')
  • 当删除索引2的'a'后,列表变为[1,2,'b'],原索引3的'b'自动前移到索引2
  • 但迭代器的下一个目标是索引3,此时列表长度仅为3(最大索引为2),循环直接结束,'b'根本没被检查到
解决方案

方案1:遍历列表的副本

遍历原列表的副本,修改原列表时不会干扰迭代过程:

def filter_list(l):
    # 用l.copy()或list(l)创建副本,遍历副本而非原列表
    for f in l.copy():
        if isinstance(f, str):
            l.remove(f)
    return l

print(filter_list([1,2,'a','b']))  # 输出 [1,2]

方案2:使用列表推导式(推荐)

这是Python处理过滤需求最简洁高效的方式,直接生成新的过滤后列表,避免修改原列表的副作用:

def filter_list(l):
    # 只保留非字符串类型的元素
    return [item for item in l if not isinstance(item, str)]

print(filter_list([1,2,'a','b']))  # 输出 [1,2]

列表推导式代码更短、可读性更强,性能也优于遍历删除的方式,是这类需求的首选方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:55:19