Python中队列
时间: 2025-05-13 22:47:23 浏览: 21
### Python 中队列的使用与实现
在 Python 中,可以通过多种方式实现队列的功能。以下是关于队列的主要实现方法及其基本操作。
#### 列表模拟队列
虽然列表不是专门设计用于队列的操作,但它仍然可以被用来存储队列中的数据[^1]。
通过定义一个队列类并封装其功能,能够更方便地管理队列的行为。例如:
```python
class Queue:
def __init__(self):
self.queue = []
def enqueue(self, item): # 入队
self.queue.append(item)
def dequeue(self): # 出队
if not self.is_empty():
return self.queue.pop(0)
else:
raise IndexError("Dequeue from empty queue")
def is_empty(self): # 是否为空
return len(self.queue) == 0
def size(self): # 获取大小
return len(self.queue)
```
上述代码展示了如何基于列表构建一个简单的队列类,并提供了 `enqueue` 和 `dequeue` 方法分别对应入队和出队操作。
---
#### 使用 `collections.deque`
为了提高性能,推荐使用 `collections.deque` 来代替普通的列表实现队列。`deque` 是双端队列,在两端执行插入和删除操作的时间复杂度均为 O(1)[^3]。
以下是一些常见的 deque 操作示例:
- **入队**
```python
import collections
q = collections.deque()
q.append(4) # 右端入队单个元素
q.appendleft(5) # 左端入队单个元素
q.extend([7, 8, 9]) # 右端批量入队多个元素
q.extendleft(['a', 'b']) # 左端批量入队多个元素
```
- **出队**
```python
right_element = q.pop() # 右端出队
left_element = q.popleft() # 左端出队
```
- **其他常用方法**
```python
q.clear() # 清空队列
max_capacity = q.maxlen # 查看最大容量(如果设置了)
```
这些方法使得 `deque` 成为一种高效且灵活的选择。
---
#### 多线程环境下的队列 —— `Queue.Queue`
当涉及到多线程编程时,建议使用标准库中的 `Queue.Queue` 或其子类 `PriorityQueue` 和 `LifoQueue`。它们内置锁机制,适合于生产者/消费者模式的应用场景[^2]。下面是一个简单例子展示如何使用它:
```python
import threading
from queue import Queue
def producer(q):
for i in range(5):
q.put(f"Item {i}")
print(f"Produced Item {i}")
def consumer(q):
while True:
try:
item = q.get(timeout=2)
print(f"Consumed {item}")
q.task_done()
except Exception as e:
break
if __name__ == "__main__":
q = Queue(maxsize=10)
t_producer = threading.Thread(target=producer, args=(q,))
t_consumer = threading.Thread(target=consumer, args=(q,))
t_producer.start()
t_consumer.start()
t_producer.join()
t_consumer.join()
```
此脚本演示了一个典型的生产者-消费者模型,其中 `put()` 将项目放入队列而 `get()` 移除并返回最前面的一项。
---
阅读全文
相关推荐


















