
此页面记录了当前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 ss1 | O(1) | 判断元素是否在set中 |
| ss1 | ss2 | O(len(ss1)+len(ss2)) |
| ss1 & ss2 | O(len(s)*len(t)) | 取交集,等同于ss1.intersection(ss2) |
| ss1 - ss2 | O(len(ss1)) | 取差集,等同于ss1.difference(ss2) |
| ss1 ^ ss2 | O(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’] = 50 | O(1) | 插入元素 |
| dd[‘a’] | O(1) | 访问元素,等同于dd.get(‘a’) |
| del dd[‘a’] | O(1) | 删除元素 |
| dd[‘b’] = 100 | O(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
本文详细介绍了Python中常见数据结构如list、tuple、set、dict和deque的操作及其对应的时间复杂度,包括访问、添加、删除、查找和排序等操作。这些信息对于理解和优化Python代码的性能至关重要。
1014

被折叠的 条评论
为什么被折叠?



