python标准模块简介(六)collections模块二

这是介绍collections模块的第二部分内容。

  • deque
  • counter
  • ChainMap

1 deque

1.1 简介

deque是双端列表类,实现了对数据高效的插入和删除,我们都知道python中的list查找数据是非常快的,可是插入和删除数据是很慢的。deque提供了popleft,appendleft实现了高效的往头部插入和删除元素。

传入deque一个可迭代对象,得到一个双端列表

In [10]: q = deque()

In [11]: q = deque('1234')

In [12]: q
Out[12]: deque(['1', '2', '3', '4'])

相比于list原有的pop和append外增加了popleft,appendleft。实现了队列头部高效存储删除元素,使用list.insert(0,args),list.pop(0)时间复杂度是O(n)随数据量增加,耗时也相应增加,而deque.popleft 和deque.appendleft时间复杂度是O(1)

In [12]: q
Out[12]: deque(['1', '2', '3', '4'])

In [13]: q.append(5)

In [14]: q
Out[14]: deque(['1', '2', '3', '4', 5])

In [15]: q.pop()
Out[15]: 5

In [16]: q
Out[16]: deque(['1', '2', '3', '4'])

In [17]: q.popleft()
Out[17]: '1'

In [18]: q
Out[18]: deque(['2', '3', '4'])

In [19]: q.appendleft('a')

In [20]: q
Out[20]: deque(['a', '2', '3', '4'])


In [25]: q.extend('qwe')

In [26]: q
Out[26]: deque(['a', '2', '3', '4', 'q', 'w', 'e'])

In [27]: q.extendleft('qwe')

In [28]: q
Out[28]: deque(['e', 'w', 'q', 'a', '2', '3', '4', 'q', 'w', 'e'])

2 Counter

2.1 简介

Counter是一个相当实用的计数器类,是dict的子类,可以方便的利用Counter来进行简单的计数分析。

2.2 构建方式

可以传入可迭代对象,字典,关键字参数来构建Counter

In [31]: s = 'aaaaadddddssssssswwwwwwwwdddddddssklsjgre;gwfhwehfiusafha'

In [32]: c = Counter(s)

In [33]: c
Out[33]:
Counter({';': 1,
         'a': 7,
         'd': 12,
         'e': 2,
         'f': 3,
         'g': 2,
         'h': 3,
         'i': 1,
         'j': 1,
         'k': 1,
         'l': 1,
         'r': 1,
         's': 11,
         'u': 1,
         'w': 10})

In [35]: c1
Out[35]: Counter()

In [36]: c2 = Counter({"a":"1","b":"2"})

In [37]: c2
Out[37]: Counter({'a': '1', 'b': '2'})

In [38]: c3 = Counter(a=1,b=2,c=3)

In [39]: c3
Out[39]: Counter({'a': 1, 'b': 2, 'c': 3})

2.2实用方法

Counter得到的对象是以键值对的方式来组织,键是元素,值是元素出现的数量,可以查看具体元素的数量,没有的元素是0

In [40]: c['a']
Out[40]: 7

In [41]: c[1]
Out[41]: 0

In [42]: c['d']
Out[42]: 12

查询出现频次较高的元素

In [66]: c.most_common()
Out[66]:
[('d', 12),
 ('s', 11),
 ('w', 10),
 ('a', 7),
 ('h', 3),
 ('f', 3),
 ('g', 2),
 ('e', 2),
 ('k', 1),
 ('r', 1),
 ('l', 1),
 ('i', 1),
 ('j', 1),
 ('u', 1),
 (';', 1)]

In [67]: c.most_common(5)
Out[67]: [('d', 12), ('s', 11), ('w', 10), ('a', 7), ('h', 3)]

3 ChainMap

3.1 简介

ChainMap是python3的新特性,它用来将多个map组成一个新的单元(原来的map结构仍然存在,类似于这些map被存在了一个list之中),这比新建一个map再将其他map用update加进来快得多。通过ChainMap可以来模拟嵌套的情景,而且多用于模板之中。

In [76]: m1 = dict(name='chao')

In [77]: m2 = dict(age=23,hobby='python')

In [78]: m = ChainMap(m1,m2)

In [79]: m
Out[79]: ChainMap({'name': 'chao'}, {'age': 23, 'hobby': 'python'})

获取map中的元素

In [80]: m.get('name')
Out[80]: 'chao'

In [81]: m['age']
Out[81]: 23

新增,返回一个新的ChainMap对象

In [85]: m.new_child(m3)
Out[85]: ChainMap({'data': '1-6'}, {'name': 'chao'}, {'age': 23, 'hobby': 'python'})

ChainMap.parents ChainMap.maps

In [86]: m.parents
Out[86]: ChainMap({'age': 23, 'hobby': 'python'})

In [87]: m.maps
Out[87]: [{'name': 'chao'}, {'age': 23, 'hobby': 'python'}]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • 容器的概念所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定...
    饭饭H阅读 372评论 0 0
  • 我们可以相拥吗 夜对花火说 爱我的深沉 给不了你太多 这胸口小小的唯一 点亮夜的灿烂 努力舒展着 终究还是 纷乱成...
    大写的张十五阅读 239评论 0 4
  • spring: 每天早上办公室的安静,听音乐,写一段东西,像是对每天生命开始的前奏。路上听到电台分享的关于财务自由...
    醉花令阅读 203评论 0 0
  • ✨读白:很久以前,在一个小岛上,每日黄昏,有位老人总看见一个小男孩在海滩上,不断弯下腰去捡东西丢向大海。老人每晚来...
    小义子_正版阅读 639评论 0 0