Python 中的 Deque

2024 年 8 月 29 日 | 阅读 6 分钟

Queue 是一个核心库,它允许用户根据 **FIFO (先进先出)** 原则定义列表。相比之下,Python 中的 **Deque** 则遵循相反的原则:**LIFO (后进先出)** 队列。在接下来的教程中,我们将通过一些示例来理解 Python 中的 Deque。

那么,让我们开始吧。

理解 Python 中的 Deque

Deque,也称为 **双端队列**,具有从任一端插入和删除数据元素的属性。**deque** 模块是称为 collections 的库的一部分。它包含了可以与参数直接调用的添加和删除数据元素的属性。为了声明一个 deque,我们必须首先导入 **collections** 库。

让我们看下面的语法来理解 **deque** 模块在 Python 中的工作原理。

语法

说明

在上面的代码片段中,我们从 **collections** 库导入了 **deque** 模块,并通过将列表名称(在本例中为 **list_name**)赋值给 **deque()** 模块来声明了 deque。这里我们还可以注意到,我们不需要任何类就可以实现这些内置方法。它们可以直接实现。

让我们看一个基于 **deque** 模块的简单示例。

示例

输出

deque(['Apple', 'Mango', 'Peaches', 'Banana', 'Papaya'])

说明

在上面的示例中,我们从 **collections** 库导入了 **deque** 模块。然后,我们使用 **deque** 模块将水果列表定义为一个 deque,指定了一些水果的名称。然后,我们打印了声明的 Deque。结果,包含一串水果名称的已声明 Deque 成功打印。

现在,让我们来理解 Deque 的各种操作。

Deque 的一些操作

Deque 中可以使用各种操作。其中一些列在下面并附有描述

序号。操作描述
1append()append() 函数用于将参数中的数据元素添加到 deque 的右端。
2appendleft()appendleft() 函数用于将参数中的数据元素添加到 deque 的左端。
3pop()pop() 函数用于从 deque 的右端删除数据元素。
4popleft()popleft() 函数用于从 deque 的右端删除数据元素。
5index(element, begin, end)index() 函数用于返回参数中指定的第一个索引值,从 begin 到 end 索引开始搜索。
6insert(i, x)insert() 函数用于在参数中指定的索引号 'i' 处插入参数 'x' 中描述的值。
7remove()remove() 函数用于删除参数中指定值的第一个出现。
8count()count() 函数用于计算参数中指定值的出现总次数。
9extend(iterable)extend() 函数用于在 deque 的右端插入多个数据元素。传递的参数是可迭代的。
10extendleft(iterable)extendleft() 函数用于在 deque 的左端插入多个数据元素。传递的参数是可迭代的。左侧追加的输出也会反转顺序。
11reverse()reverse() 函数用于反转 deque 数据元素的顺序。
12rotate()rotate() 函数用于按参数中提到的数字旋转 deque。如果提到的数字是负值,则向左旋转。否则向右旋转。

现在让我们看一些基于 **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。

示例

输出

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()** 操作在索引号 **2** 和 **7** 之间查找数据元素 **'Feb'** 的第一次出现。然后,我们使用 **insert()** 操作在第 4 个位置插入数据元素 **'Jan'**。然后,我们使用 **count()** 操作来计算数据元素 **'Feb'** 在 deque 中的出现次数。最后,我们使用 **remove()** 操作从 deque 中删除数据元素 **'Mar'** 的第一次出现,并为用户打印了结果 deque。