Python常用列表、元组、集合、字典、队列等运行时间复杂度总结

在这里插入图片描述
此页面记录了当前CPython中各种操作的时间复杂度(又名“Big O”或“大欧”)。其他Python实现(或CPython的旧版本或仍在开发版本)可能具有略微不同的性能特征。但是, 通常可以安全地假设它们的速度不超过O(log n)。 通常, 'n’是容器中当前元素的数量。'k’是参数的值或参数中的元素数。

1. list

lst = list(range(10,20))
l1 = list(range(100,105))
操作时间复杂度描述
lst[2]O(1)访问元素
lst.pop()O(1)弹出最后一个值
lst.append(l1)O(1)在末尾添加元素
lst.extend(l1)O(K)在末尾逐个添加元素
lst.clear()O(1)清空list
lst.copy()O(N)列表拷贝
lst.count(15)O(N)元素计数
lst.remove(15)O(N)删除一个元素
lst.reverse()O(N)反序
lst.sort()O(N*log(N))排序
lst.insert(1,200)O(N)在某一位置插入元素
del lst[0]O(N)删除某个位置的元素
lst.index(15)O(N)查找元素,并返回元素位置
bisect.bisect_left(lst, 15)O(log(N))有序列表使用bisect查找元素

在这里插入图片描述

2. tuple

tuple因为不可写,因此操作相对较少

tpl = tuple(range(10))
操作时间复杂度描述
tpl[2]O(1)访问元素
tpl.count(2)O(N)元素计数
tpl.index(2)O(N)查找元素,并返回元素位置

3. set

ss1 = set(range(10))
ss2 = set(range(5,15))
操作时间复杂度描述
5 in ss1O(1)判断元素是否在set中
ss1ss2O(len(ss1)+len(ss2))
ss1 & ss2O(len(s)*len(t))取交集,等同于ss1.intersection(ss2)
ss1 - ss2O(len(ss1))取差集,等同于ss1.difference(ss2)
ss1 ^ ss2O(len(ss1)*len(ss2))取异或集,等同于
ss1.add(11)O(1)增加元素
ss1.pop()O(1)弹出一个元素
ss1.remove(5)O(1)删除指定元素

在这里插入图片描述

4. dict

dd = {'a':10,'b':20,'c':30,'d':40}
操作时间复杂度描述
dd[‘e’] = 50O(1)插入元素
dd[‘a’]O(1)访问元素,等同于dd.get(‘a’)
del dd[‘a’]O(1)删除元素
dd[‘b’] = 100O(1)修改元素
dd.pop(‘b’)O(1)弹出一个元素
dd.clear()O(1)清空字典

在这里插入图片描述

5. deque

双端队列需要我们手动导入后才能使用,也是Python中一种常用的类型

from collections import deque
deq = deque(range(10))
ll = list(range(10))
操作时间复杂度描述
deq.pop()O(1)弹出最右侧的元素
deq.popleft()O(1)弹出最左侧的元素
deq.append(1)O(1)在右侧增加一个元素
deq.appendleft(1)O(1)在左侧增加一个元素
deq.extend(ll)O(K)在右侧逐个添加元素
deq.extendleft(ll)O(K)在左侧逐个添加元素
deq.rotate(K)O(K)旋转
deq.remove(5)O(N)删除指定元素
deq[0]O(1)访问第一个元素
deq[N-1]O(1)访问最后一个元素
deq[N/2]O(N)访问中间元素

在这里插入图片描述
参考链接:https://wiki.python.org/moin/TimeComplexity

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值