python 中collections的 deque使用详解
作者:阿常呓语 发布时间:2023-02-07 15:43:14
标签:python,collections,deque
1 概要
deque 是一个双端队列, 如果要经常从两端append 的数据, 选择这个数据结构就比较好了, 如果要实现随机访问,不建议用这个,请用列表.
deque 优势就是可以从两边append ,appendleft 数据. 这一点list 是没有的.
#-*- coding: UTF-8 -*-
import time
from collections import deque
# 可以指定 队列的长度
mydeque=deque(maxlen=10)
mydeque.maxlen
Out[43]: 10
# 默认从右边加入
mydeque.append(10)
mydeque.append(12)
mydeque
Out[7]: deque([10, 12])
# time.sleep(4)
# 也可以从左边加入
mydeque.appendleft('a')
mydeque.appendleft('b')
mydeque.appendleft('c')
mydeque.appendleft('d')
mydeque.appendleft('e')
mydeque
Out[11]: deque(['e', 'd', 'c', 'b', 'a', 10, 12])
mylist= range(5,8)
# 也可以加入一个列表,默认从右边加入
# mydeque.extend(mylist)
mydeque.extendleft(mylist)
mydeque
Out[14]: deque([7, 6, 5, 'e', 'd', 'c', 'b', 'a', 10, 12])
# 出队列,返回出队列的元素
# 可以从左边也可以从右边 出队列
mydeque.pop()
mydeque.popleft()
# 查看 队列里面元素个数
print len(mydeque)
# 统计元素的个数
#统计a 有几个
print mydeque.count('a')
# 在某个位置insert 一个元素
# insert(i, x)
# Insert x into the deque at position i.
d1
Out[31]: deque([10, 12, 13, 14])
d1.insert(2,'frank')
d1
Out[33]: deque([10, 12, 'frank', 13, 14])
#翻转操作
# deque.reverse()
mydeque
Out[52]: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
mydeque.reverse()
mydeque
Out[54]: deque([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
# remove 移除某个元素
mydeque
Out[23]: deque(['e', 'd', 'c', 'b', 'a', 10, 12])
mydeque.remove(10)
mydeque
Out[25]: deque(['e', 'd', 'c', 'b', 'a', 12])
# 清空队列元素 clear
mydeque
Out[46]: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
mydeque.clear
Out[47]: <function deque.clear>
mydeque.clear()
mydeque
Out[49]: deque([])
# copy 浅拷贝
# Create a shallow copy of the deque.
l1 = [6, 5, 8, 3, 9, 0, 2, 7, 4, 1]
d3 = deque(l1)
d3
Out[64]: deque([6, 5, 8, 3, 9, 0, 2, 7, 4, 1])
d4 = d3.copy()
d4
Out[66]: deque([6, 5, 8, 3, 9, 0, 2, 7, 4, 1])
2 重要方法说明
rotate 方法:
移动到最后一个,占用第一个位置,循环移动, value 是步长,rotate(value) 对队列实行旋转操作(每个元素依次向后移动value步,最后一个移动到第一个算一步)
from collections import deque
d = deque()
d.extend(['a', 'b', 'c', 'd', 'e'])
d.rotate(2) # 指定次数,默认1次
print(d) # deque(['d', 'e', 'a', 'b', 'c'])
maxlen 要说明一下, 如果指定了 maxlen
如果构建deque 的时候,指定了maxlen, 则可以通过 d.maxlen 来获得dueue的最大长度.
如果插入的数据大于 maxlen 则会自动删除旧的元素.
删除 什么元素,取决于, 从哪边添加数据.
来看一下例子:
d = deque(list(range(5)),maxlen=5)
d
Out[21]: deque([0, 1, 2, 3, 4])
d.maxlen
Out[26]: 5
# 从左边添加元素, # 元素4 被挤出 队列
d.appendleft('frank')
d
Out[23]: deque(['frank', 0, 1, 2, 3])
# 从右边添加元素, 元素 'frank' 被挤出队列.
d
Out[23]: deque(['frank', 0, 1, 2, 3])
d.append('xiaoming')
d
Out[25]: deque([0, 1, 2, 3, 'xiaoming'])
3 总结
deque 是为了高效实现插入和删除操作的双向列表
总结 :
deque 的方法 双端队列 ,进入队列,默认从右边进入,
出队列 默认从右边出队列,
移除队列元素
insert()
appendleft()
append()
extend(...)
extendleft(...)
队列长度 len(deque)
pop()
popleft()
count(value) ? # 统计某个值出现的个数
remove(...)
reverse() ??
#轮询向前走n,最后一个元素往前移动,第一个元素依次后移?
rotate(n=1)
清空队列: dequeue.clear()
deque 官方文档
来源:https://blog.csdn.net/u010339879/article/details/80767293


猜你喜欢
- 因为权限不够,导致Pycharm在运行脚本时报错:socket.error: [Errno 1] Operation not permitt
- 设法让用户happy吧~只要你的设计让用户乐了,产品的个性就得到了一次彰显,而用户对网站的情感就会获得一次升华,看看下面的知名网站的人性化设
- MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包
- calccalc 是一个我们想要做剖析(性能分析)的异步函数。按照惯例,它的最后一个参数是一个callback。我们像这样使用 calc:c
- groupby官方解释DataFrame.groupby(by=None, axis=0, level=None, as_index=Tru
- CREATE VIEW dbo.vw_db_dictionary AS SELECT TOP 100 PERCENT dbo.sysobje
- 近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉
- Pycharm默认可以识别py脚本中的SQL语句,本身很不错,但当SQL拼接时就显示的代码特别难看,找了好久,终于知道怎么关闭SQL识别功能
- BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。BETWEEN 同 AND 一起搭配使用,语法如下:WHER
- 目的工作中遇到一个需求,通过需要通过网站查询船舶名称得到MMSI码,网站来自船讯网。分析请求根据以往爬虫的经验,打开F12,通过输入船舶名称
- 大家平时见到google的广告太多了,但有没有兴趣知道一下它的运行过程呢?下面我们一起来看看这个广告代码的执行过程,以及其中的一些精彩内容。
- 从SQL Server2005开始提供了一种新的数据类型XML type,它允许用户将数据以XML文件的格式直接存储到数据表中。结合在ASP
- 改变图像大小意味着改变尺寸,无论是单独的高或宽,还是两者。也可以按比例调整图像大小。这里将介绍resize()函数的语法及实例。语法函数原型
- 今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆
- app01/models.py:from django.db import modelsclass UserInfo(models.Mode
- python matplotlib画图产生的Type 3 fonts字体不兼容更改措施:使用Type 42字体来生成PostScript 和
- 一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表
- 我们在前面已经分别介绍了如何在spring Boot中使用JPA以及如何在Spring Boot中输出REST资源。那么关于数据库访问还有一
- 使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象我们在淘宝里搜索“python”,出来的结果从url连接中可以得到搜索商品的
- ps:不曾想还有那么好用的方法。汗一个先。Div即父容器不根据内容自适应高度,我们看下面的代码:<div id="main&