📜  Python中的双端队列DeQue

📅  最后修改于: 2020-04-15 09:15:18             🧑  作者: Mango

Deque可以使用模块“ collections ” 在Python中实现。双端队列优于列表中的情况下,我们需要更快追加和从容器的两端弹出操作,双端队列提供了一种O(1)可以进行追加时间复杂度和弹出操作,而列表提供O(n)的时间复杂度。
双端操作:
1. append():此函数用于插入到双端队列的右端
2. appendleft():此函数用于插入其双端队列的左端
3. pop():此函数用于从双端队列的右端删除元素
4. popleft():此函数用于从双端队列的左端删除一个元素。

# Python代码演示#append(),appendleft(),pop()和popleft()的工作
# 导入“集合"以进行双端队列操作
import collections
# 初始化
de = collections.deque([1,2,3])
# 使用append()在右端插入元素,在双端队列的末尾插入4
de.append(4)
# 打印调整后的双端列表
print ("右侧附加后的双端队列为 : ")
print (de)
# 使用appendleft()在右端插入元素,在双端队列的开头插入6
de.appendleft(6)
# 打印修改后的双端列表
print ("左侧附加后的双端队列为 : ")
print (de)
# 使用pop()从右端删除元素,从双端队列的右端删除4
de.pop()
# 打印修改后的双端列表
print ("从右侧删除后的双端队列为 : ")
print (de)
# 使用popleft()从左端删除元素#从双端队列的左端删除6
de.popleft()
# 打印修改后的双端列表
print ("从左侧删除后的双端队列为 : ")
print (de)

输出:

右侧附加后的双端队列为 :
deque([1, 2, 3, 4])
左侧附加后的双端队列为 :
deque([6, 1, 2, 3, 4])
从右侧删除后的双端队列为 :
deque([6, 1, 2, 3])
从左侧删除后的双端队列为 :
deque([1, 2, 3])

5. index(ele,beg,end):此函数返回参数中提到的ele的第一个索引,从beg索引开始搜索,直到end索引。
6. insert(i,a):此函数将把参数a的值插入到 参数中指定的索引i
7. remove():此函数删除参数中提到的第一次出现的值。
8. count():此函数计算参数中提到的值的出现次数

# Python代码演示insert(),index(),remove(),count()的工作
# 导入“collections"以进行双端队列操作
import collections
# 初始化双端列表
de = collections.deque([1, 2, 3, 3, 4, 2, 4])
# 使用index()打印第一个出现的4
print ("数字4首先出现在的位置 : ")
print (de.index(4,2,5))
# 使用insert()在第5个位置插入值3
de.insert(4,3)
# 打印调整后的双端列表
print ("在第5个位置插入3后的双端队列为 : ")
print (de)
# 使用count()计算3的出现
print ("双端队列中的3的计数为: ")
print (de.count(3))
# 使用remove()删除第一次出现的3
de.remove(3)
# 打印调整后的双端列表
print ("删除第一次出现3后的双端队列为 : ")
print (de)

输出:

数字4首先出现在的位置 :
4
在第5个位置插入3后的双端队列为 :
deque([1, 2, 3, 3, 3, 4, 2, 4])
双端队列中的3的计数为 :
3
删除第一次出现3后的双端队列为 :
deque([1, 2, 3, 3, 4, 2, 4])

9. extend(iterable):此函数用于双端队列的右端添加多个值。传递的参数是可迭代的。
10. extendleft(iterable):此函数用于双端队列的左端添加多个值。传递的参数是可迭代的。由于左侧追加,顺序颠倒了。
11. reverse():此函数用于反转双端队列元素的顺序
12. rotation():此函数按参数中指定的编号旋转双端队列如果指定的数字为负,则向左旋转。其他旋转向右。

# Python代码演示extend(),extendleft(),rotate(),reverse()的工作
# 导入“collections"以进行双端队列操作
import collections
# 初始化deque
de = collections.deque([1, 2, 3,])
# 使用extend()将数字添加到右端
# 在右端增加4,5,6
de.extend([4,5,6])
# 打印调整后的双端列表
print ("扩展双端队列后的双端队列为 : ")
print (de)
# 使用extendleft()将数字添加到左端
# 在右端增加7,8,9
de.extendleft([7,8,9])
# 打印调整后的双端列表
print ("在开始扩展双端队列后的双端队列为 : ")
print (de)
# 使用rotate()旋转双端队列
# 向左旋转3
de.rotate(-3)
# 打印调整后的双端列表
print ("旋转双端队列后的双端队列为 : ")
print (de)
# 使用reverse()扭转双端队列
de.reverse()
# 打印调整后的双端列表
print ("反转双端队列后的队列为 : ")
print (de)

输出:

扩展双端队列后的双端队列为 :
deque([1, 2, 3, 4, 5, 6])
在开始扩展双端队列后的双端队列为 :
deque([9, 8, 7, 1, 2, 3, 4, 5, 6])
旋转双端队列后的双端队列为 :
deque([1, 2, 3, 4, 5, 6, 9, 8, 7])
反转双端队列后的队列为 :
deque([7, 8, 9, 6, 5, 4, 3, 2, 1])