Python中in和is关键字详解和使用

在 Python 中,inis 是两个常用但含义不同的关键字,初学者很容易混淆它们的用法。下面是关于它们的详细解释、注意事项及常见示例。


一、关键字 in成员运算符

1. 功能

用于判断某个元素是否存在于序列(如列表、元组、字符串、集合、字典)中

2. 基本语法

python 复制代码
element in container  # 返回 True 或 False

3. 示例

python 复制代码
# 字符串
'a' in 'apple'       # True

# 列表
3 in [1, 2, 3, 4]    # True

# 元组
'x' in ('x', 'y')    # True

# 字典(判断的是"键")
d = {'a': 1, 'b': 2}
'a' in d             # True
1 in d               # False

# 集合
5 in {1, 2, 3, 5}    # True

4. 注意事项

注意点 说明
字典中 in 判断的是键,不是值
in 实际调用的是容器的 __contains__() 方法
可以用于 for x in ... 的迭代语句中

5. 与 not in 结合使用

python 复制代码
if 'x' not in ['a', 'b', 'c']:
    print("x 不在列表中")

二、关键字 is身份运算符

1. 功能

用于判断两个变量是否引用的是同一个对象(即内存地址是否相同)。

2. 基本语法

python 复制代码
a is b     # True if a 和 b 是同一个对象
a is not b # True if a 和 b 是不同对象

3. 示例

python 复制代码
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is b)  # True,引用同一对象
print(a is c)  # False,虽然值相等,但不是同一对象
print(a == c)  # True,值相等

4. 常见应用场景

  • 判断是否为 None:推荐使用 is 而不是 ==
python 复制代码
x = None
if x is None:
    print("x is None")
  • 类型判断不推荐使用 is
python 复制代码
# 不推荐:
type(x) is int

# 推荐:
isinstance(x, int)

三、in vs is 区别总结

特性 in is
类型 成员运算符 身份运算符
判断内容 某元素是否存在于容器中 两个变量是否指向同一个对象
返回值类型 True / False True / False
应用场景 序列判断、包含性检查 None 判断、引用对象判断

四、综合示例

python 复制代码
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(2 in a)       # True
print(b is a)       # True
print(c is a)       # False
print(c == a)       # True

d = {'k': 10}
print('k' in d)     # True(判断键)
print(10 in d)      # False(值不在键列表中)

x = None
print(x is None)    # 推荐写法
print(x == None)    # 也可以,但不推荐

五、常见错误与误区

错误写法 问题说明
if x == None: 不推荐;应该使用 x is None 更明确
if a is [1, 2, 3]: 错误;新列表对象地址不同,虽然值一样,但不是一个对象
if 3 is in lst: 错误语法;不能混用 isin

六、推荐实践建议

  • 判断引用关系用 is,尤其是与 None 比较时。
  • 判断容器中是否包含元素,统一使用 in
  • 判断两个变量值是否相等,用 ==,不是 is
  • 永远不要使用 is 来判断数值、字符串等是否相等,除非你确定它们是否是同一对象。

相关推荐
Tummer8363几秒前
C#+WPF+prism+materialdesign创建工具主界面框架
开发语言·c#·wpf
九章云极AladdinEdu7 分钟前
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
java·开发语言·人工智能·深度学习·测试工具·负载均衡·transformer
量子-Alex10 分钟前
【目标检测】RT-DETR
人工智能·目标检测·计算机视觉
2201_7549184111 分钟前
OpenCV 图像透视变换详解
人工智能·opencv·计算机视觉
羽星_s27 分钟前
文本分类任务Qwen3-0.6B与Bert:实验见解
人工智能·bert·文本分类·ai大模型·qwen3
摸鱼仙人~28 分钟前
TensorFlow/Keras实现知识蒸馏案例
人工智能·tensorflow·keras
好吃的肘子29 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
ghost14331 分钟前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
小白学大数据32 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街33 分钟前
TensorFlow之微分求导
人工智能·python·tensorflow