Python中的Deque
Queue 是一个核心库,允许用户根据先进先出(FIFO)原则定义基于列表的队列。相反,Python中的 Deque 拥有相反的原则: LIFO(后进先出) 队列。在以下教程中,我们将通过一些示例仅了解Python中的Deque是什么。
所以,让我们开始吧。
理解Python中的Deque
Deque ,也称为 双端队列 ,具有从任一端插入和删除数据元素的属性。deque模块是称为collections的库的一部分。它包含了添加和删除数据元素的属性,可以直接使用参数调用。为了声明一个deque,我们必须首先导入 collections 库。
让我们考虑以下语法来了解Python中的deque模块如何工作。
语法:
# importing the deque module
# from the collections library
from collections import deque
# declaring the deque
list_name = deque()
解释:
在上面的代码片段中,我们从collections库中导入了deque模块,并通过将列表的名称(即list_name)赋值给deque()模块来声明deque。在这里,我们还可以观察到,我们不需要任何类来实现这些内置方法。它们可以直接实现。
让我们来看一个基于deque模块的简单示例。
示例:
# importing the deque module
# from the collections library
from collections import deque
# declaring the deque
fruit_list = deque(['Apple', 'Mango', 'Peaches', 'Banana', 'Papaya'])
# printing the deque
print(fruit_list)
输出:
deque(['Apple', 'Mango', 'Peaches', 'Banana', 'Papaya'])
描述:
在上面的示例中,我们从 collections 库中导入了 deque 模块。然后,我们使用 deque 模块定义了一个水果列表作为一个 deque,指定了一些水果名称。然后,我们打印了声明的 Deque。结果,声明的包含一堆水果名称的 Deque 成功地被打印出来。
现在,让我们了解一下 deque 上的各种操作。
deque 上的一些操作
deque 上有各种可以使用的操作。下面列出了其中一些操作及其描述:
序号 | 操作 | 描述 |
---|---|---|
1 | append() | append() 函数用于将参数中的数据元素添加到双端队列的右端。 |
2 | appendleft() | appendleft() 函数用于将参数中的数据元素添加到双端队列的左端。 |
3 | pop() | pop() 函数用于从双端队列的右端删除数据元素。 |
4 | popleft() | popleft() 函数用于从双端队列的左端删除数据元素。 |
5 | index(element, begin, end) | index() 函数用于返回参数中指定的第一个索引值,从 begin 索引开始搜索,直到 end 索引。 |
6 | insert(i, x) | insert() 函数用于在参数中指定的索引号 i 处插入值 x。 |
7 | remove() | remove() 函数用于删除参数中指定的第一个出现的值。 |
8 | count() | count() 函数用于计算参数中指定的值的总出现次数。 |
9 | extend(iterable) | extend() 函数用于在双端队列的右端插入多个数据元素。传递的参数是可迭代的。 |
10 | extendleft(iterable) | extendleft() 函数用于在双端队列的左端插入多个数据元素。传递的参数是可迭代的。输出中的顺序也会被反转。 |
11 | reverse() | reverse() 函数用于反转双端队列的数据元素的顺序。 |
12 | rotate() | rotate() 函数用于将双端队列旋转指定的次数,通过参数指定。如果指定的次数是负值,则向左旋转;否则向右旋转。 |
现在让我们考虑一些基于 deque 模块的示例。
示例:
# importing the collections library
# for deque operations
import collections
# declaring the deque
my_deque = collections.deque([10, 20, 30, 40, 50])
# using the append() function to add
# data element at right end
# inserting 60 at the end of the deque
my_deque.append(60)
# printing the resultant deque
print( "The deque after appending at right: " )
print( my_deque )
# using the appendleft() function to add
# data element at left end
# inserting 70 at the starting of the deque
my_deque.appendleft(70)
# printing the resultant deque
print( "The deque after appending at left: " )
print( my_deque )
# using the pop() function to remove
# data element from the right end
# removing 60 from the right end of deque
my_deque.pop()
# printing the resultant deque
print( "The deque after removing from right: " )
print( my_deque )
# using the popleft() function to remove
# data element from the left end
# removing 70 from the left end of deque
my_deque.popleft()
# printing the resultant deque
print("The deque after removing from left: " )
print( my_deque )
输出:
The deque after appending at right:
deque([10, 20, 30, 40, 50, 60])
The deque after appending at left:
deque([70, 10, 20, 30, 40, 50, 60])
The deque after removing from right:
deque([70, 10, 20, 30, 40, 50])
The deque after removing from left:
deque([10, 20, 30, 40, 50])
说明:
在上面的代码片段中,我们导入了 collections 库并声明了一个deque。然后我们使用了像 append() 和 appendleft() 这样的操作来插入一些数据元素到deque的两端,并打印修改后的deque给用户。类似地,我们还使用了像 pop() 和 popleft() 这样的操作来从deque的两端移除数据元素,并打印结果deque给用户。
示例:
# importing the collections library
import collections
# declaring the deque
my_deque = collections.deque(['Jan', 'Feb', 'Mar', 'Mar', 'Feb', 'April', 'Feb'])
# using the index() function to print
# the first occurrence of data element: Feb
print( "The first occurs of 'Feb' at a position: " )
print( my_deque.index('Feb', 2, 7) )
# using the insert() function to insert
# the data element 'Jan' at 4th position
my_deque.insert(3,'Jan')
# printing the resultant deque
print( "The deque after inserting 'Jan' at 4th position: " )
print( my_deque )
# using the count() function to count
# the occurrences of data element 'Feb'
print( "The count of 'Feb' in deque: " )
print( my_deque.count('Feb') )
# using the remove() function to remove
# the first occurrence of data element 'Mar'
my_deque.remove('Mar')
# printing the resultant deque
print( "The deque after removing the first occurrence of 'Mar': " )
print( my_deque )
输出:
The first occurs of 'Feb' at a position:
4
The deque after inserting 'Jan' at 4th position:
deque(['Jan', 'Feb', 'Mar', 'Jan', 'Mar', 'Feb', 'April', 'Feb'])
The count of 'Feb' in deque:
3
The deque after removing the first occurrence of 'Mar':
deque(['Jan', 'Feb', 'Jan', 'Mar', 'Feb', 'April', 'Feb'])
解释:
在上面的代码段中,我们再次导入了 collections 库并声明了一个deque。然后我们使用了 index() 操作来检查数据元素 ‘Feb’ 在索引号 2 和 7 之间的第一次出现。然后我们使用了 insert() 操作在第4个位置插入数据元素 ‘Jan’ 。然后我们使用了 count() 操作来计算deque中数据元素 ‘Feb’ 的出现次数。最后,我们使用了 remove() 操作来移除deque中第一次出现的数据元素 ‘Mar’ ,并将结果deque打印给用户。