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))。

原文地址:https://www.cnblogs.com/yueyun00/p/10246251.html

时间: 2024-10-29 10:39:33

Python几种数据结构内置方法的时间复杂度的相关文章

[python] 类常用的内置方法

内置方法 说明 __init__(self,...) 初始化对象,在创建新对象时调用 __del__(self) 释放对象,在对象被删除之前调用 __new__(cls,*args,**kwd) 实例的生成操作 __str__(self) 在使用print语句时被调用 __getitem__(self,key) 获取序列的索引key对应的值,等价于seq[key] __len__(self) 在调用内联函数len()时被调用 __cmp__(stc,dst) 比较两个对象src和dst __ge

Python 教程——String的内置方法

Python为String类型提供了很多很有用的内置方法,这篇文章主要针对Python2.7的内置方法做一个测试列举,展示一下用途. 如果大家想看原版的,可以去这个网址看(https://docs.python.org/2/library/stdtypes.html#string-methods),但是这里是我自己的实践以及一些理解. 1. str.capitalize() 返回第一个字母大写的str str = "a string" str.capitalize()'A string

python基础27——反射&内置方法

反射 什么是反射? 指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省) 什么是反射机制? 反射机制指的是在程序的运行状态中 对于任意一个类,都可以知道这个类的所有属性和方法 对于任意一个对象,都能够调用他的任意方法和属性 这种动态获取程序信息以及动态调用对象的功能称为反射机制 如何实现反射? class People: def __init__(self,

python中字符串的内置方法

这里说的是字符串中的内置方法,毕竟字符串是最常用的操作对象. ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__le

python中的字典内置方法小结

#!/usr/local/bin/python3 # -*- coding:utf-8 -*- #key-value #dict 无序,无下标,不需要下标,因为有key stu={ 'stu001':"zhang yu", 'stu002':"ma hong yan", 'stu003':"zhang guo bin", 'stu004':"sha chun hua" } ''' -----------------------

【Python】Java程序员学习Python(四)— 内置方法和内置变量

<假如爱有天意> 当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱是什么,短暂的相遇却念念不忘,用尽一生的时间,竟学不会遗忘,如今我们已天各一方,生活的像周围人一样,眼前人给我最信任的依赖,但愿你被温柔对待,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,短暂的相遇却念念不忘,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,当天边那颗

Python内置方法的时间复杂度(转)

原文:http://www.orangecube.net/python-time-complexity 本文翻译自Python Wiki本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了Python中若干方法的时间复杂度(或者叫“大欧”,“Big O”).该时间复杂度的计算基于当前(译注:至少是2011年之前)的CPython实现.其他Python的实现(包括老版本或者尚在开发的CPython实现)可能会在性能表现上有些许小小的差异,但一般不超过一个O(log n)项. 本文中,’n’代

Python内置方法的时间复杂度

转载自:http://www.orangecube.NET/Python-time-complexity 本文翻译自Python Wiki 本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了Python中若干方法的时间复杂度(或者叫"大欧","Big O").该时间复杂度的计算基于当前(译注:至少是2011年之前)的CPython实现.其他Python的实现(包括老版本或者尚在开发的CPython实现)可能会在性能表现上有些许小小的差异,但一般不超过一个O(

Python进阶-----类的内置方法__getattribute__

__getattribute__ 方法功能: 1 调用属性会触发该功能,属性存在则会返回相应的值:2 如果属性不存在则会抛出异常AttributeError,所以可以自定义异常信息3 存在__getattr__,若有异常出现则会传递给__getattr__用来接收,执行操作 class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是我') # return self.__dict__[ite