📅  最后修改于: 2023-12-03 14:45:56.741000             🧑  作者: Mango
collections
模块是Python标准库中的一个集合模块,提供了许多实用的数据结构,包括:namedtuple
、deque
、Counter
、defaultdict
、OrderedDict
等等。这些数据结构可以帮助程序员完成许多有趣的任务,如计数、排序、去重等等。
namedtuple
是一种特殊的元组,它可以为其元素命名。它是一个非常方便的工具,可以用于返回多个值并为这些值命名,而不用创建一个类。
它的语法是:
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
其中:
typename
是命名元组的名称field_names
是每个属性的名称,可以是一个空格分隔的字符串或一个可迭代对象rename
是一个可选的布尔参数。如果设为True,则会在发现非法标识符时将其替换为'_'defaults
是一个可选的元组,可以指定默认值module
是命名元组类的__module__属性from collections import namedtuple
# 定义一个命名元组类型表示坐标
Point = namedtuple('Point', ['x', 'y'])
p1 = Point(1, 2)
print(p1) # output: Point(x=1, y=2)
print(p1.x) # output: 1
print(p1.y) # output: 2
deque
是双端队列,可以从队列的两端添加和删除元素,它比列表更快地完成这些操作,特别是当你需要使用一个很大的序列时,它的效率优势更加明显。
from collections import deque
# 创建一个空的deque
d = deque()
# 在右边添加元素
d.append(1)
d.append(2)
d.append(3)
print(d) # output: deque([1, 2, 3])
# 在左边添加元素
d.appendleft(0)
print(d) # output: deque([0, 1, 2, 3])
# 弹出右边的元素
d.pop()
print(d) # output: deque([0, 1, 2])
# 弹出左边的元素
d.popleft()
print(d) # output: deque([1, 2])
Counter
实现了一个计数器功能,可以在一个可迭代对象中统计每个元素出现的次数,它返回一个字典,其中key是元素,value是出现的次数.
from collections import Counter
# 统计一个字符串中每个字符出现的次数
c = Counter('abcaba')
print(c) # output: Counter({'a': 3, 'b': 2, 'c': 1})
# 统计一个列表中每个元素出现的次数
lst = ['a', 'b', 'a', 'c', 'b']
c = Counter(lst)
print(c) # output: Counter({'a': 2, 'b': 2, 'c': 1})
defaultdict
是一个字典,可以为字典中不存在的键提供默认值,避免因KeyError异常而中断程序的运行。
from collections import defaultdict
# 创建一个字典,其默认值为列表类型
d = defaultdict(list)
# 添加一些元素
d['a'].append(1)
d['b'].append(2)
d['a'].append(3)
print(d) # output: defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2]})
OrderedDict
是一个有序字典,它会记住插入键值对的顺序,所以你可以按插入的顺序遍历它。
from collections import OrderedDict
# 创建一个有序字典
od = OrderedDict()
# 添加一些元素
od['a'] = 1
od['c'] = 3
od['b'] = 2
print(od) # output: OrderedDict([('a', 1), ('c', 3), ('b', 2)])