什么是Python中的队列?请举例说明

什么是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()函数会引发异常。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程