Python 数据类型: 双端队列
说到容器类型, 大家第一时间想到的多半是 list, 而 list 确实也能解决大部分的需要, 但碰到列表内的数据量相当大的时候, 性能问题就显得尤为重要; 再或者列表被恶意注入一个无穷大的数据量时, 就可能会暴露出安全问题来. 较好的替代方法是: collections.deque. 获得性能或安全的同时, 牺牲的是数据大小.
deque 队列两端取出或者删除时间复杂度都是 O(1), 而列表都是 O(n), 队列的性能比列表更好
简介
collections.deque 对象(双端队列), 支持从任意一端增加删除元素. deque 是线程安全的, 内存高效的队列, 它被设计为从两端追加和弹出都非常快.
创建 deque 对象
deque() 用于创建一个 deque 对象
可选参数:
iterable 一个可迭代对象, 如列表, 元组
maxlen 最大长度, 超出最大长度, 会将之前的元素挤出去
示例:
- from collections import deque
- dq = deque([1,2,3,4]],maxlen=10)
deque 对象的方法
dq.append(x) 在右端添加 x
- >>>dq.append(5)
- >>>print(dq)
- deque([1, 2, 3,4,5])
dq.appendleft(x) 在左端添加 x
- >>>dq.appendleft(0)
- >>>print(dq)
- deque([0,1,2,3,4,5])
dq.pop() 在右端弹出元素, 若队列无元素, 会报错
>>>dq.pop() 5
dq.popleft() 在左端弹出元素, 若队列无元素, 会报错
>>>dq.popleft() 0
dq.extend(iterable) 和列表的 extend 类似, 在右侧扩展队列, 参数是一个可迭代对象
>>>dq.extend([5,6,7,8])
dq.extendleft(iterable) 同理
>>>dq.extendleft([5,6,7,8])
dq.remove(value) 移除第一个找到的 value, 若未找到, 会导致 IndexError
dq.remove(3)
dq.clear() 清空队列
dq.clear()
rotate(n) 如果 n>0, 所有元素向右移动 n 个, 否则向左
dq.rotate(5)
如果你学到什么, 记得给我点个赞哦, 也可以关注我的公众号 (Python 雁横) 获取更多有趣的教程
来源: http://www.bubuko.com/infodetail-2695164.html