目录
介绍
双端队列,即两端都可以进出的队列。
创建
deque([iterable,[maxlen])
>>> from collections import *
>>> d = deque([1,2,3,4])
索引 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
值 | 1 | 2 | 3 | 4 |
操作符
拼接操作符 +
>>> dd =deque([5,6,7,8])
>>> d+dd
deque([1, 2, 3, 4, 5, 6, 7, 8])
重复操作符 *
>>> dd * 3
deque([5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8])
比较操作符(==、!=、>、<、>=、<=)
>>> d
deque([1, 2, 3, 4])
>>> dd
deque([5, 6, 7, 8])
>>> d<dd
True
>>> d == dd
False
篇幅原因,其他的请读者自行尝试
赋值操作符(+=、*=)
>>> d += dd
>>> d
deque([1, 2, 3, 4, 5, 6, 7, 8])
>>> d *=2
>>> d
deque([1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8])
成员操作符(in、not in)
>>> 7 in d
True
>>> 9 in d
False
>>> 9 not in d
True
注:介绍方法时,d重置为deque([1,2,3,4])
方法
最大尺寸
maxlen,未设置时为None。
>>> print(d.maxlen)
None
添加
从右侧
append
(x)
添加 x 到右端。
>>> d.append(5)
>>> d
deque([1, 2, 3, 4, 5])
从左侧
appendleft
(x)
添加 x 到左端。
>>> d.appendleft(0)
>>> d
deque([0, 1, 2, 3, 4, 5])
从右侧扩展
extend
(iterable)
扩展deque的右侧,通过添加iterable参数中的元素。
>>> t = (7,8,9)
>>> d.extend(t)
>>> d
deque([0, 1, 2, 3, 4, 5, 7, 8, 9])
从左侧扩展
extendleft
(iterable)
扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。
>>> d.extendleft(t)
>>> d
deque([9, 8, 7, 0, 1, 2, 3, 4, 5, 7, 8, 9])
任意位置插入
insert
(i, x)
在位置 i 插入 x 。
如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个IndexError。
>>> d.insert(10,33)
>>> d
deque([9, 8, 7, 0, 1, 2, 3, 4, 5, 7, 33, 8, 9])
如果设置了maxlen,为防止IndexError,可在使用前用内置函数len判断一下是否插入后会超出长度。
索引
index
(x[, start[, stop]])
返回 x 在 deque 中的位置(在索引 start 之后,索引 stop 之前)。 返回第一个匹配项,如果未找到则引发ValueError。
>>> d.index(9)
0
>>> d.index(9,2)
12>>> d.index(9,2,11)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 9 is not in deque
为防止ValueError,可使用成员操作符in判断是否存在。
删除
从右侧
pop
()
移去并且返回一个元素,deque 最右侧的那一个。 如果没有元素的话,就引发一个IndexError。
>>> d.pop()
9
为防止IndexError,可在使用前用内置函数len判断一下长度是否为0。
从左侧
popleft
()
移去并且返回一个元素,deque 最左侧的那一个。 如果没有元素的话,就引发IndexError。
>>> d.popleft()
9
>>> d
deque([8, 7, 0, 1, 2, 3, 4, 5, 7, 33, 8])
为防止IndexError,可在使用前用内置函数len判断一下长度是否为0。
按值
remove
(value)
移除找到的第一个 value。 如果没有的话就引发ValueError。
>>> d.remove(8)
>>> d
deque([7, 0, 1, 2, 3, 4, 5, 7, 33, 8])
为防止ValueError,可使用成员操作符in判断是否存在。
清空
copy
()
创建一份浅拷贝
clear
()
移除所有元素,使其长度为0
>>> dd = d.copy()
>>> d.clear()
>>> d
deque([])
>>> d = dd
逆序
reverse
()
将deque原地逆序排列。
>>> d.reverse()
>>> d
deque([8, 33, 7, 5, 4, 3, 2, 1, 0, 7])
循环
rotate
(n=1)
向右循环移动 n 步。 如果 n 是负数,就向左循环。
如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop())
, 向左循环一步就等价于 d.append(d.popleft())
。
>>> d.rotate()
>>> d
deque([7, 8, 33, 7, 5, 4, 3, 2, 1, 0])>>> d.rotate(-1)
>>> d
deque([8, 33, 7, 5, 4, 3, 2, 1, 0, 7])
函数一节延续上面的d
函数
长度
len
返回对象元素个数
>>> len(d)
10
最值
max
返回可迭代对象中最大的元素
min
返回可迭代对象中最小的元素
>>> max(d)
33
>>> min(d)
0
求和
sum
对 iterable 中的项求和并返回总计值。
>>> sum(d)
70
参考
python3.7官方文档-collections.deque
练习:滑动窗口的最大值
可使用双端队列,不过我就击败了20%多。
更多python相关内容:【python总结】python学习框架梳理
本人b站账号:lady_killer9
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。