在 Python3 中,列表(list
)可以很方便地用作栈(后进先出,LIFO),但作为队列(先进先出,FIFO)时效率较低(因为从列表头部操作的时间复杂度为 O(n))。推荐使用 collections.deque
实现高效队列操作。
目录
2.2 使用 collections.deque 实现高效队列
1. 将列表当作栈使用
栈的核心操作(直接用列表实现)
栈的特点是后进先出(LIFO)
stack = [] # 创建空栈
# 压入元素(栈顶)
stack.append(1) # 栈: [1]
stack.append(2) # 栈: [1, 2]
# 弹出元素(栈顶)
top_element = stack.pop() # 返回 2,栈变为 [1]
# 查看栈顶元素(不弹出)
if stack:
peek_element = stack[-1] # 返回 1
# 检查是否为空
is_empty = len(stack) == 0 # False
# 获取栈大小
size = len(stack) # 1
2. 将列表当作 队列(Queue) 使用
队列的特点是先进先出(FIFO)
2.1 将列表当作队列使用(不推荐)
列表的 .pop(0)
操作效率低(需移动所有元素)
queue = [] # 创建队列(用列表)
# 入队(队尾添加)
queue.append(1) # 队列: [1]
queue.append(2) # 队列: [1, 2]
# 出队(队首移除)
first_element = queue.pop(0) # 返回 1,队列变为 [2]
# 查看队首元素(不移除)
if queue:
front_element = queue[0] # 返回 2
# 其他操作类似栈(检查空、大小)
2.2 使用 collections.deque
实现高效队列
deque
的 popleft()
和 appendleft()
操作均为 O(1):
from collections import deque
queue = deque() # 创建高效队列
# 入队(队尾添加)
queue.append(1) # 队列: deque([1])
queue.append(2) # 队列: deque([1, 2])
# 出队(队首移除)
first_element = queue.popleft() # 返回 1,队列变为 deque([2])
# 查看队首元素(不移除)
if queue:
front_element = queue[0] # 返回 2
# 其他操作
is_empty = len(queue) == 0
size = len(queue)
3. 完整实例对比
3.1 栈的实例
stack = []
stack.append("a")
stack.append("b")
print("Stack:", stack) # ['a', 'b']
print("Pop:", stack.pop()) # 'b'
print("Top:", stack[-1]) # 'a'
print("Size:", len(stack)) # 1
3.2 队列的实例(推荐 deque
)
from collections import deque
q = deque()
q.append("x")
q.append("y")
print("Queue:", q) # deque(['x', 'y'])
print("Dequeue:", q.popleft()) # 'x'
print("Front:", q[0]) # 'y'
print("Size:", len(q)) # 1
3.3 关键区别总结
操作 | 栈(用列表) | 队列(用 deque ) |
---|---|---|
添加元素 | append() | append() |
移除元素 | pop() | popleft() |
查看顶部 | list[-1] | deque[0] |