Python 的特殊序列类 collections模块

一、什么是“特殊的序列类”?

  • 指的是 Python 标准库 collections 模块中提供的高级数据结构,它们在功能、效率或语法上对内置的列表、字典、元组等序列类型进行了扩展和补充。
  • 这些类包括:namedtupledequeCounterOrderedDictdefaultdictChainMap 等。

二、常见的特殊序列类及其作用

1. namedtuple

  • 作用:为元组(tuple)添加字段名,使其可以像对象一样通过属性访问元素。
  • 用途:让代码更具可读性,适合用来表示结构化数据。
  • 示例
    from collections import namedtuple
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(1, 2)
    print(p.x, p.y)  # 1 2
    

2. deque(双端队列)

  • 作用:高效实现队列和栈操作,可以在两端 O(1) 时间插入和删除元素。
  • 用途:适合需要频繁在头尾增删元素的场景,如队列、滑动窗口等。
  • 示例
    from collections import deque
    d = deque([1, 2, 3])
    d.appendleft(0)
    d.append(4)
    print(d)  # deque([0, 1, 2, 3, 4])
    d.pop()
    d.popleft()
    

3. Counter

  • 作用:用于计数,统计元素出现的次数,返回字典形式。
  • 用途:快速统计、频率分析、词频统计等。
  • 示例
    from collections import Counter
    c = Counter('abracadabra')
    print(c)  # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
    print(c.most_common(2))  # [('a', 5), ('b', 2)]
    

4. OrderedDict

  • 作用:有序字典,记住元素插入顺序(Python 3.7+ 内置 dict 也已保持有序)。
  • 用途:需要顺序敏感的字典操作时。
  • 示例
    from collections import OrderedDict
    od = OrderedDict()
    od['a'] = 1
    od['b'] = 2
    print(od)  # OrderedDict([('a', 1), ('b', 2)])
    

5. defaultdict

  • 作用:为字典提供默认值,访问不存在的键时自动创建并赋默认值。
  • 用途:避免 KeyError,适合分组、计数等场景。
  • 示例
    from collections import defaultdict
    dd = defaultdict(list)
    dd['a'].append(1)
    print(dd['a'])  # [1]
    print(dd['b'])  # [],自动创建
    

6. ChainMap

  • 作用:将多个字典或映射合并为一个视图,查找时按顺序依次查找。
  • 用途:多级配置、作用域链等。
  • 示例
    from collections import ChainMap
    a = {'x': 1, 'y': 2}
    b = {'y': 3, 'z': 4}
    cm = ChainMap(a, b)
    print(cm['y'])  # 2(优先查找第一个字典)
    print(cm['z'])  # 4
    

三、这些特殊序列类的优势

  • 功能更丰富:如 Counter 直接支持计数,deque 支持高效两端操作。
  • 代码更简洁:如 defaultdict 省去判断键是否存在的代码。
  • 效率更高:如 deque 在两端插入删除比 list 快得多。
  • 可读性更强:如 namedtuple 让元组有名字,代码更易懂。

四、应用场景举例

  • 数据分析Counter 统计词频,defaultdict 分组聚合。
  • 算法实现deque 实现队列、滑动窗口、BFS等。
  • 配置管理ChainMap 合并多级配置。
  • 结构化数据namedtuple 代替简单的类或结构体。

五、总结

  • Python 的特殊序列类(主要在 collections 模块中)为内置的 list、dict、tuple 提供了更强大、更高效、更灵活的补充。
  • 掌握这些工具,可以让你的代码更简洁、性能更好、功能更丰富。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贵哥的编程之路(热爱分享 为后来者)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值