什么是Python中的队列?请举例说明
队列是一种线性数据结构,它使用 先进先出(FIFO) 机制。
第一个进入队列的元素将是第一个被处理的元素。
更多Python相关文章,请阅读:Python 教程
示例
在公交车站排队可以帮助理解队列数据结构。到达公交车站的第一个人是队列中的第一个人,其他人按他们到达公交车站的顺序排队。当公交车到达时,到达公交车站的第一个人将是第一个进入公交车的人,其余人将按他们到达公交车站的顺序进入。因此,遵循先进先出机制。
Python中队列的实现
在Python中,可以使用其他线性数据结构或Python库中的内置模块以各种方式实现队列。
方法1 – 使用list实现
在Python中,可以使用list实现队列。由于在列表开头插入或删除元素需要O(n) 的时间,而这比使用其他方式的实现要慢,因此效率不是很高。
涉及到的操作
append() − 此函数在队列末尾添加元素。
pop(0) − 此函数删除并返回队列中的第一个元素。
示例
queue=[]
queue.append(1)
queue.append(2)
queue.append(3)
print("初始队列",queue)
print("从队列弹出的元素")
print(queue.pop(0))
print(queue.pop(0))
print("删除一些元素后的队列",queue)
输出
Initial queue [1, 2, 3]
Element popped from the queue
1
2
Queue after popping some elements [3]
一旦队列为空,无法再删除更多元素,否则会出现异常。
queue.pop(0)
IndexError: pop from empty list
方法2 – 使用queue.Queue实现
这是使用Python内置模块来实现队列的方法。我们需要从queue中导入Queue。我们可以使用特定大小初始化队列。大小为零表示无限队列。
涉及到的操作
maxsize − 队列允许的最大元素数
get() − 从队列中删除并返回第一个元素。如果队列为空,请等待至少有一个元素。
get_nowait() − 从队列中删除并返回第一个元素。如果队列为空,请引发异常。
put(item) − 在队列末尾附加元素。如果队列已满,请等待直到有一个可用的空槽。
put_nowait(item) − 在队列末尾添加元素。如果队列已满,请引发异常。
full() − 如果队列已满,则返回true,否则返回false。
empty() − 如果队列为空,则返回True,否则返回false
qsize() − 返回队列中存在的元素数量。
示例
from queue import Queue
q=Queue(maxsize=3)
q.put(1)
q.put(2)
q.put(3)
print("队列已满",q.full())
print("从队列中弹出的元素")
print(q.get())
print(q.get())
print("队列中的元素数",q.qsize())
print("队列是否为空",q.empty())
输出
Is queue full True
Element popped from the queue
1
2
Number of elements in queue 1
Is queue empty False
方法3 – 使用collections.deque实现
这是在Python中实现队列的另一种方法。我们需要从collections模块导入deque。
涉及的操作
append() − 此函数在队列末尾添加一个元素。
popleft() − 此函数以O(1)的时间复杂度移除并返回队列中的第一个元素。
示例
from collections import deque
queue=deque()
queue.append(1)
queue.append(2)
queue.append(3)
print("Intial queue: ",queue)
print("Element popped from the queue")
print(queue.popleft())
print(queue.popleft())
print("Queue after popping some elements: ",queue)
输出
Intial queue: deque([1, 2, 3])
Element popped from the queue
1
2
Queue after popping some elements: deque([3])
在空deque上使用popleft()函数会引发异常。