Python中的队列是什么?举例说明!
队列是一种线性数据结构,适用于先进先出mechanism(FIFO)。
首先进入队列的元素是第一个被处理的元素。
示例
队列数据结构可以借助公交车站的队列来理解。第一个到达公交车站的人是队列中的第一个,其他人到达公交车站时站在他身边。公交车到站时,最先到达公交车站的人将最先上车,其余人按到达公交车站的先后顺序上车。因此,遵循先进先出机制。
Python中Queue的实现
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的内置模块实现队列的方法。我们需要从队列中导入队列。我们可以用一些特定的大小初始化队列。大小为零意味着无限队列。
涉及的操作
maxsize-队列中允许的最大元素数
get()-从队列中移除并返回第一个元素。如果队列为空,则等待队列至少有一个元素。
get_nowait()-从queue.If队列中移除并返回第一个元素为空,引发异常。
put(item)-在queue.If队列的末尾追加一个元素已满,等待空闲插槽可用。
put_nowait(item)-在queue.If队列末尾追加一个元素已满,引发异常。
full()-如果队列已满则返回真,否则返回假。
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("初始队列: ",queue) print("Element popped from the queue") print(queue.popleft()) print(queue.popleft()) print("弹出一些元素后的队列: ",queue)
输出
初始队列: deque([1, 2, 3]) Element popped from the queue 1 2 弹出一些元素后的队列: deque([3])
popleft()在空双端队列上使用函数会引发异常。