前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >collections模块

collections模块

作者头像
py3study
发布2020-01-20 16:46:31
3560
发布2020-01-20 16:46:31
举报
文章被收录于专栏:python3python3

  collections模块在内置数据类型(dict、list、set、tuple)的基础上,还提供了几个额外的数据类型:ChainMap、Counter、deque、defaultdict、namedtuple和OrderedDict等。

  1. namedtuple:生成可以使用名字来访问元素内容的tuple子类
  2. deque:双端队列,可以快速的从另外一侧追加和推出对象
  3. Counter:计数器,主要用于计数
  4. OrderedDict:有序字典
  5. defaultdict:带有默认值的字典

namedtuple

我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:p=(1,2)

但是,看到(1,2),很难看出这个tuple是用来表示坐标的。

那么,我们的namedtuple就能用上了。 

namedtuple('名称',‘属性list’)

代码语言:javascript
复制
from collections import namedtuple
Point = namedtuple('Point',['x','y'])
p = Point(1,2)
print(p.x)  # 1
print(p.y)  # 2

可以验证创建的Point对象是tuple的一种子类:

代码语言:javascript
复制
print(isinstance(p,Point))  # True
print(isinstance(p,tuple))  # True

deque

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

代码语言:javascript
复制
from collections import deque
q = deque(['a','b','c','d'])
q.append('e')
q.appendleft('A')
print(q)    # deque(['A', 'a', 'b', 'c', 'd', 'e'])
q.pop()
q.popleft()
print(q)    # deque(['a', 'b', 'c', 'd'])

defaultdict

使用dict时,如果引用的Key不存在,就会抛出异常。如果希望key不存在时,返回一个默认值,就可以使用defaultdict。

代码语言:javascript
复制
from collections import defaultdict
d = defaultdict(lambda:'N/A')
d['key1'] = 'abc'
print(d['key1'])    # abc
print(d['key2'])    # N/A

注意默认值是调用函数返回的,而函数在创建defaultdict对象是传入。

除了在key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

OrderDict

使用字典时,key是无序的。在对字典做迭代时,我们无法确定key的顺序。如果要保持key的顺序,可以用OrderedDict

代码语言:javascript
复制
from collections import OrderedDict
d = dict([('a',1),('b',2),('c',3)])
print(d)    # {'a': 1, 'c': 3,'b': 2}   dict的key是无序的
od = OrderedDict([('a',1),('b',2),('c',3)])
print(od)   # OrderedDict([('a', 1), ('b', 2), ('c', 3)])   OrderedDict的key是有序的

注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

代码语言:javascript
复制
from collections import OrderedDict
od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
print(od.keys())    # odict_keys(['z', 'y', 'x'])

Counter

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。

代码语言:javascript
复制
from collections import Counter
c = Counter()
for i in 'asdsadsafjzjk':
    c[i]+=1
print(c)    # Counter({'a': 3, 's': 3, 'd': 2, 'j': 2, 'f': 1, 'z': 1, 'k': 1})

cc = Counter('asdsadsafjzjk')
print(cc)   # Counter({'a': 3, 's': 3, 'd': 2, 'j': 2, 'f': 1, 'z': 1, 'k': 1})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档