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

原文地址:http://www.cnblogs.com/Leethon-lizhilog/p/16806676.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性