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

Python中in判断字符串在列表返回False,与列表指定索引元素相等却返回True

核心原因

你代码中的cityList不是Python原生列表,而是pandas.Series对象,pandas Series的in操作符语义和原生列表完全不同:

  • 对Python原生列表而言:值 in 列表的作用是判断「值是否存在于列表的元素中」
  • 对pandas Series而言:x in series的作用是判断「x是否是Series的索引标签(index label)」,而非判断x是否存在于Series的数值中

对应你的代码场景

你执行(city.split()[0] + ' ' + city.split()[1]) in cityList时,本质是在判断字符串New Orleans是不是cityList的索引标签,而不是判断它是否存在于cityList的元素值中,因此返回False。
而你使用(city.split()[0] + ' ' + city.split()[1]) == cityList[28]时,是直接取出Series中索引为28的元素做等值比较,两个字符串内容一致,因此返回True,和运行输出完全匹配。

正确判断方式

如果要判断某个值是否存在于pandas Series的元素中,不能直接用in操作符,有两种常用实现方式:

  • 访问Series的底层数值数组后再判断:
    target_str = city.split()[0] + ' ' + city.split()[1]
    # 直接判断目标值是否存在于Series的数值中
    is_exist = target_str in cityList.values
    
  • 先将Series转为Python原生列表,再使用符合预期的in判断:
    # 把Series转为原生list后再使用in操作符
    cityList_native = cities['Metropolitan area'].str.strip().tolist()
    is_exist = target_str in cityList_native
    

也可以使用pandas原生的isin()方法批量判断值是否存在,适合多值匹配的场景:

# 传入待判断的目标值列表,返回布尔结果
is_exist = cityList.isin([target_str]).any()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:06:01