148 lines
2.9 KiB
Python
148 lines
2.9 KiB
Python
|
|
|
|||
|
|
"""
|
|||
|
|
deque
|
|||
|
|
双端队列,可以快速的从另外一侧追加和推出对象,deque是一个双向链表,
|
|||
|
|
针对list连续的数据结构插入和删除进行优化。它提供了两端都可以操作的序列,
|
|||
|
|
这表示在序列的前后你都可以执行添加或删除操作。双向队列(deque)对象支持以下方法:
|
|||
|
|
"""
|
|||
|
|
from collections import deque
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
1、append()
|
|||
|
|
添加 x 到右端。
|
|||
|
|
"""
|
|||
|
|
d = deque('ghi')
|
|||
|
|
d.append('j')
|
|||
|
|
print(d)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
2、appendleft()
|
|||
|
|
添加 x 到左端。
|
|||
|
|
"""
|
|||
|
|
d.appendleft('f')
|
|||
|
|
print(d)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
3、clear()
|
|||
|
|
移除所有元素,使其长度为0.
|
|||
|
|
"""
|
|||
|
|
d = deque('ghi')
|
|||
|
|
d.clear()
|
|||
|
|
print(d)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
4、copy()
|
|||
|
|
创建一份浅拷贝。
|
|||
|
|
"""
|
|||
|
|
d = deque('xiaoweuge')
|
|||
|
|
y = d.copy()
|
|||
|
|
print(y)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
5、count()
|
|||
|
|
计算 deque 中元素等于 x 的个数。
|
|||
|
|
"""
|
|||
|
|
d = deque('xiaoweuge-shuai')
|
|||
|
|
print(d.count('a'))
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
6、extend()
|
|||
|
|
扩展deque的右侧,通过添加iterable参数中的元素。
|
|||
|
|
"""
|
|||
|
|
a = deque('abc')
|
|||
|
|
b = deque('cd')
|
|||
|
|
a.extend(b)
|
|||
|
|
print(a)
|
|||
|
|
|
|||
|
|
#与append 的区别
|
|||
|
|
a = deque('abc')
|
|||
|
|
b = deque('cd')
|
|||
|
|
a.append(b)
|
|||
|
|
print(a)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
7、extendleft()
|
|||
|
|
扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。
|
|||
|
|
"""
|
|||
|
|
a = deque('abc')
|
|||
|
|
b = deque('cd')
|
|||
|
|
a.extendleft(b)
|
|||
|
|
print(a)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
8、index()
|
|||
|
|
返回 x 在 deque 中的位置(在索引 start 之后,索引 stop 之前)。 返回第一个匹配项,如果未找到则引发 ValueError。
|
|||
|
|
"""
|
|||
|
|
d = deque('xiaoweuge')
|
|||
|
|
print(d.index('w'))
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
9、insert()
|
|||
|
|
在位置 i 插入 x 。
|
|||
|
|
如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError。
|
|||
|
|
"""
|
|||
|
|
a = deque('abc')
|
|||
|
|
a.insert(1, 'X')
|
|||
|
|
print(a)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
10、pop()
|
|||
|
|
移去并且返回一个元素,deque 最右侧的那一个。 如果没有元素的话,就引发一个 IndexError。
|
|||
|
|
"""
|
|||
|
|
d = deque('abc')
|
|||
|
|
print(d.pop())
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
11、popleft()
|
|||
|
|
移去并且返回一个元素,deque 最左侧的那一个。 如果没有元素的话,就引发 IndexError。
|
|||
|
|
"""
|
|||
|
|
d = deque('abc')
|
|||
|
|
print(d.popleft())
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
12、remove(value)
|
|||
|
|
移除找到的第一个 value。 如果没有的话就引发 ValueError。
|
|||
|
|
"""
|
|||
|
|
a = deque('abca')
|
|||
|
|
a.remove('a')
|
|||
|
|
print(a)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
13、reverse()
|
|||
|
|
将deque逆序排列。返回 None 。
|
|||
|
|
"""
|
|||
|
|
#逆序排列
|
|||
|
|
d = deque('ghi') # 创建一个deque
|
|||
|
|
print(list(reversed(d)))
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
14、rotate(n=1)
|
|||
|
|
向右循环移动 n 步。 如果 n 是负数,就向左循环。
|
|||
|
|
如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft()) 。
|
|||
|
|
"""
|
|||
|
|
# 向右边挤一挤
|
|||
|
|
d = deque('ghijkl')
|
|||
|
|
d.rotate(1)
|
|||
|
|
print(d)
|
|||
|
|
|
|||
|
|
# 向左边挤一挤
|
|||
|
|
d.rotate(-1)
|
|||
|
|
print(d)
|
|||
|
|
|
|||
|
|
#看一个更明显的
|
|||
|
|
x = deque('12345')
|
|||
|
|
x.rotate()
|
|||
|
|
print(x)
|
|||
|
|
|
|||
|
|
d = deque(['12',' av', 'cd'])
|
|||
|
|
d.rotate(1)
|
|||
|
|
print(d)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
15、maxlen
|
|||
|
|
Deque的最大尺寸,如果没有限定的话就是 None 。
|
|||
|
|
"""
|
|||
|
|
d=deque(maxlen=10)
|
|||
|
|
for i in range(20):
|
|||
|
|
d.append(i)
|
|||
|
|
print(d)
|