Python - AI 助手

Python collections.deque



在 Python 中,**deque()** 是一种数据类型,它返回一个新的 deque 对象,该对象使用来自可迭代对象的 数据从左到右初始化(使用 append())。如果未指定可迭代对象,则新的 deque 为空。

**deque** 使用 **collections** 模块实现。当我们需要执行更快的操作,例如追加和弹出元素时,我们更倾向于使用 **deque**,因为它的时间复杂度为 O(1),而 **list** 的时间复杂度为 O(n)。

语法

以下是 Python **deque()** 类的语法:

class collections.deque([iterable[, maxlen]])

参数

此数据类型接受可迭代对象作为参数。

返回值

此数据类型返回 **** 对象。

示例

以下是 Python **deque()** 类的基本示例:

from collections import deque
d = deque('xyz')
print(d)

以下是上述代码的输出:

deque(['x', 'y', 'z'])

deque 中的方法

以下是 deque() 类中存在的方法:

方法 功能
append(x) 将 x 添加到 deque 的右侧
appendleft(x) 将 x 添加到 deque 的左侧
clear() 删除 deque 中的所有元素,使其长度为 0
copy() 创建 deque 的浅拷贝。
count(x) 计算 deque 中等于 x 的元素个数
extend(iterable) 通过追加来自 iterable 参数的元素来扩展 deque 的右侧
extendleft(iterable) 通过追加来自 iterable 的元素来扩展 deque 的左侧。
index(x[, start[, stop]]) 返回 x 在 deque 中的位置(在索引 start 或之后,在索引 stop 之前)。返回第一个匹配项,如果未找到则引发 ValueError。
insert(i, x) 在位置 i 将 x 插入到 deque 中
pop() 删除并返回 deque 右侧的一个元素
popleft() 删除并返回 deque 左侧的一个元素。如果没有元素,则引发 IndexError。
rotate(n=1) 将 deque 向右旋转 n 步。如果 n 为负数,则向左旋转
maxlen deque 的最大大小,如果无界则为 None
remove(value) 删除 value 的第一次出现。如果未找到,则引发 ValueError。
reverse() 就地反转 deque 的元素,然后返回 None。

Python deque.append() 方法

我们可以使用 **append()** 将元素添加到 deque 中。元素添加到 deque 的右端。**appendleft()** 用于将元素添加到 deque 的左端。一次只能将单个元素添加到 deque 中。

示例

在这里,我们创建了 deque 并使用 **append()** 在 deque 的右侧添加了一个元素。使用 **appendleft()**,我们在 deque() 的左侧添加了一个元素:

import collections
# initializing deque
deque1 = collections.deque([1, 2, 3])
print("deque: ", deque1)
# using append() to insert element at right end
# inserts 100 at the end of deque
deque1.append(100)
# printing modified deque
print("The deque after appending at right : ",deque1)
# using appendleft() to insert element at left end
# inserts 21 at the beginning of deque
deque1.appendleft(21)
# printing modified deque
print("The deque after appending at left : ",deque1)

以下是上述代码的输出:

deque:  deque([1, 2, 3])
The deque after appending at right :  deque([1, 2, 3, 100])
The deque after appending at left :  deque([21, 1, 2, 3, 100])

Python deque.pop() 方法

deque 中的 **pop()** 方法用于从 deque 的末尾删除元素。**popleft()** 用于删除 deque 左端的元素。

示例

这里,我们使用pop()方法删除了右侧末尾的元素。使用popleft()方法,我们删除了双端队列左侧末尾的元素。此方法一次只删除一个元素。

import collections
# initializing deque
deque_1 = collections.deque([60, 11, 42, 93, 74])
print("deque: ", deque_1)
# using pop() to delete element from right end of deque
deque_1.pop()
# printing modified deque
print("The deque after deleting from right : ",deque_1)
# using popleft() to delete element from left 
deque_1.popleft()
# printing modified deque
print("The deque after deleting from left : ",deque_1)

以下是上述代码的输出:

deque:  deque([60, 11, 42, 93, 74])
The deque after deleting from right :  deque([60, 11, 42, 93])
The deque after deleting from left :  deque([11, 42, 93])

Python deque.extend() 方法

deque 的extend()方法用于在双端队列的右侧末尾添加多个元素。extendleft()方法用于在双端队列的左侧末尾添加元素。

示例

以下是此类的另一个示例:

import collections
# initializing deque
deque_1 = collections.deque([1, 2, 3])
# using extend() to add numbers to right end 
deque_1.extend([40,50])
# printing modified deque
print ("The deque after extending deque at right end :",deque_1)
# using extendleft() to add numbers to left end 
deque_1.extendleft([70,80])
# printing modified deque
print ("The deque after extending deque at left end: ",deque_1)

以下是上述代码的输出:

The deque after extending deque at right end : deque([1, 2, 3, 40, 50])
The deque after extending deque at left end:  deque([80, 70, 1, 2, 3, 40, 50])

Python deque.rotate() 方法

rotate()方法根据参数中指定的数字旋转双端队列。如果指定的数字为负数,则向左旋转;否则向右旋转。

示例

这里,我们创建了一个双端队列并在其上执行了旋转操作。当我们传递一个负数时,从左侧旋转;当传递一个正数时,从右侧旋转:

from collections import deque
#defined deque
deque_1=deque([1,2,3,4])
#left rotation of deque 
deque_1.rotate(-1)
print("Left Rotation Of deque :",deque_1)
#right rotating of deque
deque_1.rotate(2)
print("Right Rotation Of deque :",deque_1)

以下是上述代码的输出:

Left Rotation Of deque : deque([2, 3, 4, 1])
Right Rotation Of deque : deque([4, 1, 2, 3])
python_modules.htm
广告