为何Python中str("").strip() in (".32")返回True?
问题解析
- 你踩了Python的一个小坑:
(".32")不是元组!Python里定义单元素元组必须在元素末尾加逗号,比如(".32",),否则括号只是用来提升优先级的符号,最终(".32")就是普通字符串".32"。 - 两种
in操作的逻辑完全不同:- 当
in右侧是字符串时,它检查的是左侧是否是右侧的子串。str("").strip()得到的是空字符串"",而空字符串是任何字符串的子串,所以"" in ".32"返回True。 - 当
in右侧是列表时,它检查的是左侧是否和列表里的某个元素完全相等。列表[".32"]里只有元素".32",空字符串和它不相等,所以返回False。
- 当
- 你可以自己验证类型:运行
print(type((".32")))会输出<class 'str'>,而print(type((".32",)))才会输出<class 'tuple'>。如果换成真正的元组(".32",)执行"" in (".32",),结果就和列表一样是False了。
内容的提问来源于stack exchange,提问作者Jesse
相关产品推荐
相关产品推荐

