Python是一种高级语言,它拥有强大的语言特性,极大地提高了开发人员的效率。Python的语言特性之一是其集合框架,它提供了多种内置数据结构,如列表、元组、字典、集合等。然而,这些内置数据结构并不一定满足所有需求。需要进一步扩展集合框架以提高编程效率。这就是Python collections模块的作用。
2. collections模块的功能在Python内置数据结构表达能力的基础上,collections模块提供了一组扩展数据类型,包括:
命名元组(namedtuple)
双向队列(deque)
计数器(Counter)
默认字典(defaultdict)
有序字典(OrderedDict)
这些扩展数据类型解决了一些常见问题,提供了高效、易于使用的数据结构,帮助Python程序员更快地解决问题。
3. 命名元组(namedtuple)Python内置的元组类型采用下标访问元素,这种方式具有易读性和易于理解的优点。然而,它对开发人员有一定限制,即代码易出错,因为容易混淆各个下标所代表的值。namedtuple改善了这个问题。
命名元组是元组的子类,它拥有自己的名称和字段。在使用时,可以像元组一样使用,但是更具可读性和易于理解性。
from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])
pt = Point(1, 2)
print(pt.x, pt.y)
这段代码创建了一个名为Point的命名元组,它包含名为x和y的字段。使用这个命名元组创建了一个名称为pt的实例。可以像普通元组一样访问属性,但是更具可读性和易于理解性。
4. 双向队列(deque)Python的列表可以在列表的开头或结尾执行快速的插入和删除操作。但是,当列表需要从中间删除或添加大量元素时,就会变慢。deque是一种双向队列,它可以像列表一样进行fast appends和pops操作。而且,切片操作也比列表更快。
deque经常用于存储需要快速添加和删除元素的场景,如网络爬虫爬取页面的URL队列。
from collections import dequed = deque([1, 2, 3, 4])
d.append(5) # 添加到队列末尾
d.appendleft(0) # 添加到队列前面
print(d.pop()) # 从队列末尾删除并返回元素
print(d.popleft()) # 从队列前面删除并返回元素
print(list(d)) # 将deque转换为列表
5. 计数器(Counter)Python内置字典提供了在一组键和值之间进行快速查找的机制,但它并不适用于统计。Counter类为计数提供集合方法和字典键的计数器。它不仅支持基本的计数操作,还提供了方便的排序和比较方法。
from collections import Counterc = Counter("hello, world!")
print(c) # 统计每个字符出现的次数
print(c.most_common(3)) # 返回最常见的3个元素和其计数值
6. 默认字典(defaultdict)内置字典对于不在字典中的键的查找操作会引发KeyError异常。当需要在字典中欠缺默认值时,可以使用defaultdict。
defaultdict是字典的子类,它有一个特定的方法——default_factory。当字典引发KeyError异常时,默认工厂函数将为字典返回一个默认值。default_factory默认值为None,也可以将其指定为其他值。
from collections import defaultdicts = 'mississippi'
d = defaultdict(int)
for k in s:
d[k] += 1
print(d) # 统计每个字符出现的次数,如果某个键不存在,将返回默认值0
7. 有序字典(OrderedDict)Python 3.7及之后版本的字典key以插入顺序保持有序。然而,在早于Python3.7版本的Python中,字典的顺序是随机的。如果需要保持键值对的顺序,可以使用collections.OrderedDict。OrderedDict使用一个双向链表来实现有序字典,键每次插入字典时都会被添加到该链表的末尾。在字典的操作选项和普通字典相同。但键在字典上迭代时,它们将与它们插入时的顺序一致。
from collections import OrderedDictd = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3
for k, v in d.items():
print(k, v) # 输出键和值,它们是按顺序排列的
总结Python collections模块提供了一组扩展数据类型,它们提供了高效、易于使用的数据结构,帮助Python程序员更快地解决问题。这个模块包含了五种类型,分别是命名元组、双向队列、计数器、默认字典,和有序字典。
建议阅读官方文档以深入了解每种类型的详细用法,还可以了解和学习如何创建自己的Python集合。