Python几种数据结构内置方法的时间复杂度
参考:https://blog.csdn.net/baoli1008/article/details/48059623
注:下文中,’n’代表容器中元素的数量,’k’代表参数的值,或者参数的数量。
1.列表(list)
以完全随机的列表考虑平均情况。
列表是以数组(Array)实现的。
最大的开销发生在超过当前分配大小的增长,这种情况下所有元素都需要移动;或者是在起始位置附近插入或者删除元素,这种情况下所有在该位置后面的元素都需要移动。
如果需要在一个队列的两端进行增删的操作,应当使用collections.deque(双向队列)
操作 操作说明 时间复杂度(平均情况) 时间复杂度(最坏情况) index(value) 查找list某个元素的索引 O(1) O(1) a=index(value) 索引赋值 O(1) O(1) list[:] 列表复制 O(n) O(n) list.append(value) 队尾添加 O(1) O(1) list.insert(index, value) 根据索引插入某个元素 O(n) O(n) list[index] 取元素 O(1) O(1) list[index]=value 赋值 O(1) O(1) list.pop() 队尾删除 O(1) O(1) list.pop(index) 根据索引删除某个元素 O(n) O(n) [i for i in list] 遍历/迭代 O(n) O(n) list[m:n] 取切片 O(k) O(k) del list[m:n] 删除切片 O(n) O(n) list[m:n]=[n] 更改切片 O(k+n) O(k+n) list.extend([]) 列表扩展 O(k) O(k) list.sort() 列表排序 O(nlogn) O(nlogn) list*n 列表乘法 O(nk) O(nk) i in list 列表搜索 O(n) min(list), max(list) 取最大和最小值 O(n) len(list) 计算长度 O(1) O(1)
2.字典(dict)
- 下列字典的平均情况基于以下假设:
- 对象的散列函数足够健壮(robust),不会发生冲突。
- 字典的键是从所有可能的键的集合中随机选择的。
操作 操作说明 平均情况 最坏情况 copy 复制 O(n) O(n) dict[key] 取元素 O(1) O(n) dict[key]=value 更新元素 O(1) O(n) del dict[key] 删除元素 O(1) O(n) [i for i in dict] 遍历字典 O(n) O(n) i in dict 搜索元素 O(1) O(1)
3.集合(set)
操作 操作说明 平均情况 最坏情况 i in set 搜索元素 O(1) O(n) set_1 | set_2 并集 O(len(set_1)+len(set_2)) set_1 & set_2 交集 O(min(len(set_1), len(set_2)) O(len(set_1) * len(set_2)) set_1 - set_2 差集 O(len(set_1)) set.difference_update(set_2) 更新 O(len(set_2)) set^t 对称差集 O(len(set)) O(len(set) * len(t)) set.symmetric_difference_update(t) O(len(t)) O(len(t) * len(set))
- 差集(set_1 - set_2,或set_1.difference(set_2))运算与更新为差集(set_1.difference_uptate(set_2))运算的时间复杂度并不相同:
- 前者是将在set_1中,但不在set_2中的元素添加到新的集合中,因此时间复杂度为O(len(set_1))。
- 后者是将在set_2中的元素从set_1中移除,因此时间复杂度为O(len(set_2))。
Python几种数据结构内置方法的时间复杂度的更多相关文章
- Python 数据类型常用的内置方法(三)
目录 Python 数据类型常用的内置方法(三) 1.列表内置方法 1.sort():升序 2.reverse():颠倒顺序 3.列表比较运算 2.字典内置方法 1.对Key的操作 2.len( )- ...
- Python 数据类型常用的内置方法(二)
目录 Python 数据类型常用的内置方法(二) 1.字符串类型常用内置方法 1.upper.lower.isupper.islower 2.startswith.endswith 3.format ...
- Python 数据类型常用的内置方法(一)
目录 Python 数据类型常用的内置方法 1.整型 int 2.浮点型 float 字符串转浮点型: 3.字符串 str 多种类型转字符型: 索引 切片 len( )方法:统计字符串长度/个数 移除 ...
- 《Python》反射、内置方法(__str__,__repr__)
一.反射 通过字符串的形式操作对象相关的属性.(使用字符串数据类型的变量名来获取这个变量的值) Python中的一切事物都是对象(都可以使用反射) 反射类中的变量 反射对象中的变量 反射模板中的变量 ...
- python 面向对象反射以及内置方法
一.反射 什么是反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用放射. 反射的四种方法: hasattr:hasattr(objec ...
- python今日分享(内置方法)
目录 一.习题详解 二.数据类型的内置方法理论 三.整型相关操作 四.浮点型相关操作 五.字符串相关操作 六.列表相关操作 今日详解 一.习题详解 1.计算1-100所有数据之和 all_num = ...
- python 基本数据类型以及内置方法
一.数字类型 # 一.整型int # ======================================基本使用====================================== ...
- python面向对象 : 反射和内置方法
一. 反射 1. isinstance()和issubclass() isinstance( 对象名, 类名) : 判断对象所属关系,包括父类 (注:type(对象名) is 类名 : 判断对象所属 ...
- python基础之反射内置方法元类
补充内置函数 isinstance(obj,Foo) # 判断obj是不是foo的实例 issubclass() # 判断一个类是不是另一个类的子类 反射 什么是反射? 通过字符串来操作 ...
随机推荐
- word2016怎么让目录索引显示在左边?
视图里面 勾选导航窗格即可 前提是你分级分好
- Redmine发布新闻,自动发送邮件功能失效恢复
问题描述:操作数据库,修改项目公开状体后,创建新闻,自动发送邮件功能失效. 问题检查和恢复测试: 1.检查管理员权限 2.重新手动配置项目公开状态,覆盖数据操作 3.对比其他正常项目数据库状态,进行恢 ...
- EXCEL 2007施工进度横道图制作步骤及实战练习
[知识讲解] 1.将图表中的部分图形“隐藏”起来 如果为了实现某种特殊的图表效果,需要将图表中的部分图形“隐藏”起来,除了将该系列删除外(有时候这种方法不能达到所需要的效果),还可以通过下面的方法来实 ...
- position 有五个值:static、relative、absolute、fixed、inherit。
position 有五个值:static.relative.absolute.fixed.inherit. static 是默认值.就是按正常的布局流从上到下从左到右布局,平常我们做网页时,没有指定 ...
- 用工厂模式解决ASP.NET Core中依赖注入的一个烦恼
这是最近在实际开发中遇到的一个问题,用 asp.net core 开发一个后端 web api ,根据指定的 key 清除 2 台 memcached 服务器上的缓存.背景是我们在进行 .net co ...
- POJ 1456 - Supermarket - [贪心+小顶堆]
题目链接:http://poj.org/problem?id=1456 Time Limit: 2000MS Memory Limit: 65536K Description A supermarke ...
- ROADS POJ - 1724 约束最短路 暴搜 加剪枝
http://poj.org/problem?id=1724 题意:最短路的模板,不过每条边加上一个费用,要求总费用不超过k 题解:不能用dijkstra ,直接暴力,dfs维护len和cost. 普 ...
- hyperledger-fabric/qemu/kvm/virtual-manager -------vagrant-virtual-box
天我也遇到了这个问题,原因是你的 vagrant 版本跟你的 virtualbox 版本不匹配,解决的方法是,更换 virtualbox 的版本.我的 vagrant 版本是 1.8.4 ,virtu ...
- [skill][https][ssl/tls] HTTPS相关知识汇总
结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA DHE / ECDHE PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...
- 查找->静态查找表->分块查找(索引顺序表)
文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...