Python中tuple的'in'操作单元素非整词匹配问题咨询
问题原因:这不是元组的行为差异,是语法误用
你遇到的现象既不是Python的设计特性,也不是Bug,根源在于你没有正确创建单个元素的元组。
在Python中,创建单个元素的元组必须在元素末尾添加逗号,否则括号仅作为表达式优先级的包裹符号,变量实际存储的是括号内的单个元素本身(这里就是字符串"ENG_EN1")。
错误写法分析
skip_funcs = ("ENG_EN1") # 这不是元组,是字符串!等价于 skip_funcs = "ENG_EN1" "ENG" in skip_funcs # 此时是检查"ENG"是否为字符串"ENG_EN1"的子串,返回True
正确的单个元素元组写法
添加逗号后,才会创建真正的元组,此时in运算符的行为就和list、set一致了:
skip_funcs = ("ENG_EN1",) # 末尾的逗号才是元组的标识 "ENG" in skip_funcs # 检查"ENG"是否是元组的元素,返回False "ENG_EN1" in skip_funcs # 返回True
验证对比
当元组有多个元素时,你自然会添加逗号,所以能得到预期结果;而list和set的语法不存在这个歧义(["ENG_EN1"]直接是列表,{"ENG_EN1"}直接是集合),所以不会出现类似问题。
内容的提问来源于stack exchange,提问作者Alex Chen
相关产品推荐
相关产品推荐

