内置模块之collections

内置模块之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得到的是一种类似字典的数据类型。

posted @ 2022-10-19 16:11  leethon  阅读(28)  评论(0编辑  收藏  举报