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


队列是一种线性数据结构,它遵循**先进先出** (FIFO) 机制。

先进入队列的元素将首先被处理。

示例

可以通过公交车站的队列来理解队列数据结构。先到达公交车站的人是队列中的第一个人,其他人则在他到达后依次排队。当公交车到达时,先到达公交车站的人将是第一个上车的人,其余的人将按照到达公交车站的顺序上车。因此,遵循**先进先出**机制。

Python中队列的实现

Python中的队列可以通过多种方式实现,可以使用其他线性数据结构或Python库中的内置模块。

方法1 - 使用列表实现

Python中的队列可以使用列表实现。这种方法效率不高,因为在列表开头插入或删除元素需要O(n)时间,这比其他方法慢。

涉及的操作

append() - 此函数在队列末尾添加一个元素。

pop(0) - 此函数删除并返回队列中的第一个元素。

示例

 实时演示

queue=[]
queue.append(1)
queue.append(2)
queue.append(3)
print("Initial queue",queue)
print("Element popped from the queue")
print(queue.pop(0))
print(queue.pop(0))
print("Queue after popping some elements",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("Is queue full",q.full())
print("Element popped from the queue")
print(q.get())
print(q.get())
print("Number of elements in queue",q.qsize())
print("Is queue empty",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()函数将引发异常。

更新于:2021年3月11日

324 次浏览

开启你的职业生涯

完成课程后获得认证

开始学习
广告