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
相关产品推荐
相关产品推荐

