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

使用for循环移除列表非字符串元素时误删字符串的问题

解决遍历列表移除非字符串元素时的异常问题

错误原因分析

你的代码存在两个核心问题:

  1. 类型判断逻辑错误:type(item) != 'str'是错误的判断方式——type(item)返回的是类型对象(比如<class 'str'>),和字符串'str'比较永远不相等,导致所有元素都被判定为非字符串,触发移除操作。
  2. 遍历原列表时直接修改:在for item in Forex_ticker循环中直接删除元素,会导致列表长度动态变化,迭代器索引错位,跳过部分元素,最终出现字符串被误删的情况。

正确解决方案

方案1:遍历列表副本,修正类型判断

遍历原列表的副本,避免修改原列表影响循环迭代,同时用isinstance正确判断字符串类型:

Forex_ticker = list(currency.unique())

# 遍历列表的副本,确保循环不受原列表修改影响
for item in Forex_ticker.copy():
    # isinstance能正确识别字符串类型,包括子类场景
    if not isinstance(item, str):
        Forex_ticker.remove(item)

方案2:列表推导式(推荐,简洁高效)

直接生成仅包含字符串元素的新列表,不需要修改原列表:

Forex_ticker = [item for item in currency.unique() if isinstance(item, str)]

方案3:使用filter函数

通过filter过滤出字符串元素,再转为列表:

Forex_ticker = list(filter(lambda x: isinstance(x, str), currency.unique()))

验证效果

执行上述任意方案后,Forex_ticker会正确保留所有字符串元素,移除nan:

['CADCAD', 'CADCHF', 'CADEUR', 'CADGBp', 'CADUSD', 'CADNOK', 'CADMXN']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:15:46