目 录CONTENT

文章目录

Python-collections基础

~梓
2025-03-03 / 0 评论 / 0 点赞 / 21 阅读 / 1844 字
温馨提示:
本文最后更新于2025-03-03,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Python 的 collections 库提供了一些有用的集合类,用于扩展 Python 内置集合类型(如 listdictset 等)的功能。下面为你详细介绍该库中每个主要类及其使用示例:

1. namedtuple

namedtuple 是一个工厂函数,用于创建具有命名字段的元组子类。它使得元组更具可读性,类似于简单的类。

from collections import namedtuple

# 定义一个名为 Point 的 namedtuple 类型
Point = namedtuple('Point', ['x', 'y'])

# 创建 Point 实例
p = Point(1, 2)

# 访问字段
print(p.x)  # 输出: 1
print(p.y)  # 输出: 2

2. deque

deque 是双端队列,支持从两端高效地添加和删除元素,时间复杂度为 。

from collections import deque

# 创建一个 deque 对象
d = deque([1, 2, 3])

# 从右端添加元素
d.append(4)
print(d)  # 输出: deque([1, 2, 3, 4])

# 从左端添加元素
d.appendleft(0)
print(d)  # 输出: deque([0, 1, 2, 3, 4])

# 从右端删除元素
d.pop()
print(d)  # 输出: deque([0, 1, 2, 3])

# 从左端删除元素
d.popleft()
print(d)  # 输出: deque([1, 2, 3])

3. Counter

Counter 是一个字典的子类,用于统计可哈希对象的出现次数。

from collections import Counter

# 创建一个 Counter 对象
c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])

# 统计元素出现次数
print(c)  # 输出: Counter({'a': 3, 'b': 2, 'c': 1})

# 获取指定元素的出现次数
print(c['a'])  # 输出: 3

# 找出出现次数最多的元素
print(c.most_common(1))  # 输出: [('a', 3)]
  • update() 方法允许你更新现有的 Counter 对象,甚至可以从一个可迭代对象或者另一个 Counter 对象中获取数据。
c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
c.update(['b', 'c', 'd'])
print(c)  # 输出: Counter({'a': 3, 'b': 3, 'c': 2, 'd': 1})
  • subtract() 方法用于从现有的 Counter 中减去计数,它可以通过一个可迭代对象或另一个 Counter 对象来指定需要减少的元素。
c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
c.subtract(['a', 'b', 'd'])
print(c)  # 输出: Counter({'a': 2, 'b': 1, 'c': 1, 'd': -1})
  • elements() 方法返回一个 迭代器,它会返回一个元素按其计数重复的序列。这个方法可以帮助你恢复原来的元素顺序和频率。
c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
elements = list(c.elements())
print(elements)  # 输出: ['a', 'a', 'a', 'b', 'b', 'c']
  • clear() 方法清空 Counter 中的所有元素。
c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
c.clear()
print(c)  # 输出: Counter()
  • 你可以使用 +- 运算符对 Counter 对象进行合并或差异操作。它们类似于集合的合并和差集操作。
c1 = Counter(['a', 'b', 'a', 'c'])
c2 = Counter(['a', 'b', 'b', 'd'])

# 合并两个 Counter 对象
c3 = c1 + c2
print(c3)  # 输出: Counter({'a': 2, 'b': 3, 'c': 1, 'd': 1})

# 取两个 Counter 对象的差集
c4 = c1 - c2
print(c4)  # 输出: Counter({'c': 1})
  • | 运算符用于取两个 Counter并集
  • & 运算符用于取两个 Counter交集
c1 = Counter(['a', 'b', 'a', 'c'])
c2 = Counter(['a', 'b', 'b', 'd'])

# 并集
c3 = c1 | c2
print(c3)  # 输出: Counter({'a': 2, 'b': 2, 'c': 1, 'd': 1})

# 交集
c4 = c1 & c2
print(c4)  # 输出: Counter({'a': 1, 'b': 1})

4. OrderedDict

OrderedDict 是一个字典的子类,它会记住元素插入的顺序。

from collections import OrderedDict

# 创建一个 OrderedDict 对象
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

# 遍历 OrderedDict
for key, value in od.items():
    print(key, value)
# 输出:
# a 1
# b 2
# c 3

5. defaultdict

defaultdict 是一个字典的子类,当访问不存在的键时,会返回一个默认值,而不是抛出 KeyError 异常。

from collections import defaultdict

# 创建一个 defaultdict 对象,默认值为 0
dd = defaultdict(int)

# 访问不存在的键
print(dd['a'])  # 输出: 0

# 向字典中添加元素
dd['b'] = 2
print(dd)  # 输出: defaultdict(<class 'int'>, {'a': 0, 'b': 2})

6. ChainMap

ChainMap 用于将多个字典或映射组合成一个单一的视图,按顺序搜索键。

from collections import ChainMap

# 创建两个字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# 创建 ChainMap 对象
cm = ChainMap(dict1, dict2)

# 访问键
print(cm['a'])  # 输出: 1
print(cm['b'])  # 输出: 2,优先使用 dict1 中的值
print(cm['c'])  # 输出: 4
0

评论区

Nickname
Email
Website
0/500
0 comments