IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python in关键字 -> 正文阅读

[Python知识库]Python in关键字

作者:recommend-item-box type_blog clearfix

目录

in关键字

使用示例

判断是否包含子字符串

判断值是否在列表中存在

判断值是否在集合中存在

判断值是否在元组中存在

原理

时间复杂度


in关键字

in关键字用于判断对象A和对象B的从属关系,相较于大多数程序设计语言,in的存在使得Python代码在判断从属关系时简化了大量逻辑,使得程序结构更加清晰易懂。

使用示例

判断是否包含子字符串

if __name__ == '__main__':
    demo = "I love Python"
    print("Python" in demo)
    # output: True
    print("Python " in demo)
    # output: False

判断值是否在列表中存在

if __name__ == '__main__':
    demo = [1, 3, 5]
    if 2 not in demo:
        demo.append(2)
    print(demo)
    # output: [1, 3, 5, 2]

判断值是否在集合中存在

if __name__ == '__main__':
    demo = {1, 3, 5}
    if 2 not in demo:
        demo.add(2)
    print(demo)
    # output: {1, 3, 5, 2}

判断值是否在元组中存在

if __name__ == '__main__':
    demo = 1, 3, 5
    print(2 in demo)
    # output: False

原理

关键字in实际调用的是对象的__contains__方法。下面使用示例来详细说明。

我们定义一个Demo类,Demo类重写了__contains__方法,打印参数item,并返回True。在主程序中,我们实例化Demo类,生成demo对象,并打印 3 in demo的结果(附在代码注释):

class Demo(object):
    def __contains__(self, item):
        print("item: ", item)
        return True


if __name__ == '__main__':
    demo = Demo()
    print(3 in demo)
    # outputs:
    # item: 3
    # True

可以看出in关键是实际上是调用了右边对象(demo)的__contains__方法,而__contains__方法的参数item就是in关键字的左边对象(整型数字3)。这里仅仅是示例代码,因此上述的__contains__重写在实际应用中没有任何意义,甚至可能会带来一些问题:因为Demo的实例出现在in关键字右边时,总是返回True的结果。?

时间复杂度

通过前面几节内容的介绍,我们可以认为in关键字实际上是Python的一个语法糖,本质上是Python的一个方法。因此不能简单的认为in的时间复杂度为O(1),而是要跟类中的具体实现有关。在Python中,list类的__contains__方法的时间复杂度为O(n),set类的时间复杂度为O(1)。因为set底层是哈希表实现的,在查找效率上要优于list。在我们自己的class中,一定要保证__contains__方法的时间复杂度处于尽可能的最优解,以减少in关键字所产生的时间消耗。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:42:11  更:2021-09-09 11:44:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:21:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码