内置模块之collections
具名元组:nametuple
具名元组就是对元组和元组元素都命名了。
命名后,除了更好辨识,还可以通过元组元素的名字来取值了(可以不限于索引取值了)
from collections import namedtuple # 导入具名元组方法
应用场景:二维坐标系
point = namedtuple('点', ('x', 'y')) # 定义一种元组类型
p1 = point(1, 2) # 传入参数
print(p1) # 点(x=1, y=2) # 此元组展现形式
print(p1.x) # 1 # 元组内的元素也可以通过点的方式取出
print(p1.y) # 2
应用场景2:扑克牌
poker = namedtuple('扑克牌', ('花色', '牌值'))
card = poker('♠', 'A')
print(card) # 扑克牌(花色='♠', 牌值='A')
双端队列:deque
这里涉及队列和堆栈的概念,这是有关数据结构的概念
- 队列:先进先出FIFO
- 堆栈:先进后出FIFO
队列通常是在入队时在队尾添加元素,在出队时,队头弹出元素,而双端队列就没有这样的输入输出限制。这里collections
模块中的deque
就是双端队列。
也可以参照list类型理解为双向列表。
from collections import deque # 导入deque功能
q1 = deque() # 定义一个空队列
q1.append(1) # 与列表的append一致
q1.appendleft(0) # 从左侧添加元素
print(q1) # deque([0, 1])
q2 = deque([1, 2, 3]) # 定义一个含元素的队列
print(q2.pop()) # 3
print(q2.popleft()) # 1
q3 = deque([1, 2, 3, 4], 10) # 定义一个双向队列,并设置最大长度
可以看到deque为我们提供了一个新的数据类型deque,而它对比list增加了左侧添加和左侧弹出的功能。
有序字典:OrderedDict
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict
,可以将键值对的顺序保持与插入顺序一致。
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d) # {'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
默认字典:defaultdict
使用dict
时,如果引用的Key不存在,就会抛出KeyError
。
如果希望key不存在时,返回一个默认值,就可以用defaultdict
:
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在
# 'abc'
dd['key2'] # key2不存在,返回默认值
# 'N/A'
统计:Counter
可以追踪容器类型中元素出现的次数:
from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
# Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
而Counter
得到的是一种类似字典的数据类型。