Python 的 collections 模块

1. deque (双端队列)

定义

deque(读作 “deck”,即双端队列)是一个支持从两端高效添加和删除元素的数据结构。相比列表(list)在头部操作的 O(n) 时间复杂度,deque 的两端操作都是 O(1)。

用途
  • 队列和栈:可以用 deque 实现 FIFO(队列)或 LIFO(栈)。
  • 滑动窗口:在处理固定大小的窗口问题时,deque 适合维护窗口内的元素。
  • BFS(广度优先搜索)deque 常用于实现队列。
  • 字符串或数组的双端操作:需要频繁在两端添加/删除元素时。
常用方法
  • append(x):在右端添加元素 x。
  • appendleft(x):在左端添加元素 x。
  • pop():移除并返回右端元素。
  • popleft():移除并返回左端元素。
  • extend(iterable):将可迭代对象中的元素添加到右端。
  • extendleft(iterable):将可迭代对象中的元素添加到左端(注意顺序会反转)。
  • clear():清空队列。
  • rotate(n):将队列向右旋转 n 步(n 为负数时向左旋转)。
示例代码
from collections import deque

# 创建一个双端队列
d = deque([1, 2, 3])

# 添加元素
d.append(4)       # d = deque([1, 2, 3, 4])
d.appendleft(0)   # d = deque([0, 1, 2, 3, 4])

# 删除元素
right = d.pop()       # right = 4, d = deque([0, 1, 2, 3])
left = d.popleft()    # left = 0, d = deque([1, 2, 3])

# 旋转
d.rotate(1)       # d = deque([3, 1, 2])
d.rotate(-1)      # d = deque([1, 2, 3])

print(d)  # 输出 deque([1, 2, 3])
竞赛场景

在 BFS 中,deque 是实现队列的首选。例如:

from collections import deque

def bfs(start, graph):
    queue = deque([start])
    visited = set([start])
    
    while queue:
        node = queue.popleft()
        print(node, end=' ')
        for neighbor in graph[node]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)

# 示例图
graph = {
   
    1: [2, 3],
    2: [1, 4],
    3: [1, 5],
    4: [2],
    5: [3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱看烟花的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值