collections.deque__init__()方法的功能详细介绍
collections.deque()是Python中的一个双向队列数据结构,它可以在两端高效地插入和删除元素。deque类是线程安全的,因此可以在多线程环境下使用。deque的实现使用了循环双端队列,这意味着在插入和删除元素时,deque可以根据需要动态调整底层数组的大小,从而提供了高效的操作。
deque的初始化方法有几种不同的方式,可以根据具体需求选择适合的方式来初始化一个deque对象。
1. 初始化空的deque对象
可以使用不传入任何参数的方式来创建一个空的deque对象,如下所示:
>>> import collections >>> d = collections.deque() >>> print(d) deque([])
2. 使用可迭代对象初始化deque对象
可以使用一个可迭代对象来初始化一个deque对象,deque将会包含可迭代对象中的所有元素,如下所示:
>>> import collections >>> d = collections.deque([1, 2, 3, 4, 5]) >>> print(d) deque([1, 2, 3, 4, 5])
3. 设置固定大小的deque对象
可以通过设置maxlen参数来创建一个固定大小的deque对象,如果超出了指定的大小,那么旧元素将会被移除,如下所示:
>>> import collections >>> d = collections.deque([1, 2, 3], maxlen=3) >>> print(d) deque([1, 2, 3], maxlen=3) >>> d.append(4) >>> print(d) deque([2, 3, 4], maxlen=3)
在上述示例中,最初创建的deque对象有一个最大长度为3的限制,当添加新元素4时,最旧的元素1被移除,使得deque对象中的元素数量保持在最大长度限制内。
deque对象还提供了一些常用的方法来操作队列,比如append()方法用于在队列的右端添加元素,appendleft()方法用于在队列的左端添加元素,pop()方法用于在队列的右端弹出元素,popleft()方法用于在队列的左端弹出元素等。
下面是一个示例,展示了如何使用deque对象实现一个循环队列:
import collections
def circular_queue(size):
dq = collections.deque(maxlen=size)
while True:
command = input("Enter 'push', 'pop' or 'quit': ")
if command == "push":
value = input("Enter a value to push: ")
dq.append(value)
print("Queue: ", list(dq))
elif command == "pop":
if len(dq) == 0:
print("Queue is empty.")
else:
value = dq.popleft()
print("Popped value: ", value)
print("Queue: ", list(dq))
elif command == "quit":
break
else:
print("Invalid command.")
circular_queue(3)
在上面的示例中,我们使用一个循环来不断接收用户的输入,根据用户输入的不同命令来执行不同的操作。当用户输入"push"命令时,我们会要求用户输入一个值,然后将该值添加到队列的右端,并打印当前队列的状态。当用户输入"pop"命令时,如果队列非空,我们会从队列的左端弹出一个元素,并打印该元素的值以及当前队列的状态。当用户输入"quit"命令时,循环退出。
通过以上介绍,我们可以看到collections.deque()方法能够方便地初始化一个deque对象,并提供了一些方便的方法来操作队列,使得我们能够更加灵活和高效地使用队列数据结构。
