Python成员运算符in和not in用于判断值是否在序列中,返回布尔值;in对字典只检查键,性能上集合/字典为O(1),列表/元组为O(n),需注意大小写、None及嵌套结构等常见误区。

Python成员运算符 in 和 not in 用于判断某个值是否存在于序列(如列表、元组、字符串、字典等)中,返回布尔值 True 或 False。它们简洁高效,是日常编码中高频使用的操作符,但用法细节和常见误区值得深挖。
两者都是二元运算符,左边是待查元素,右边是容器对象。Python 会调用容器的 __contains__ 方法(如果定义了),否则回退为逐项比较(如列表)或哈希查找(如字典、集合)。
'a' in 'abc' → True(字符串支持子串判断)3 in [1, 2, 3, 4] → True
'key' in {'key': 10} → True(检查键,不是值)10 in {'key': 10} → False(值不参与 in 判断)5 not in (1, 2, 3) → True
对字典使用 in 默认只检查键(key),这是最常被误解的地方。若需检查值或键值对,必须显式调用对应视图:
'name' in user_dict ✅ 检查键是否存在'Alice' in user_dict.values() ✅ 检查值是否存在('name', 'Alice') in user_dict.items() ✅ 检查键值对是否存在'Alice' in user_dict ❌ 不会自动搜索值,结果恒为 False(除非键名恰好叫 'Alice')成员判断效率取决于底层实现:
立即学习“Python免费学习笔记(深入)”;
in
'x' * 1000000 in 'x' 很慢),但短字符串极快例如:从万级用户ID中频繁查是否存在,用 set(user_ids) 替代 list(user_ids) 可显著提速。
写错容易,改起来费劲。几个真实场景中的典型问题:
'Hello' in ['hello', 'world'] 是 False;需要统一转换:word.lower() in [w.lower() for w in words],或更优:用集合预处理 words_lower = {w.lower() for w in words}
None in [0, False, ''] → False,但 0 in [0, False, ''] → True(注意 0 == False,但 in 比较的是对象身份+值,不自动类型转换)5 in [[1,2], [3,4,5]] → False;要写成 any(5 in sublist for sublist in nested_list)
__contains__(self, item) 方法,即可让实例响应 in 操作以上就是Python成员运算符用法详解_in与notin实战解析【技巧】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号