博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-collections模块
阅读量:5827 次
发布时间:2019-06-18

本文共 4282 字,大约阅读时间需要 14 分钟。

简介

本篇主要介绍collections模块中的以下几样:

①计数器counter()

②有序字典OrderedDict()

③默认字典defaultdict()

④双向队列deque()

 

一、计数器counter()

counter 是一种特殊的字典,主要方便用来计数,它继承于dict类,因此具有dict类中所有的功能,此外,还具备了自己特有的功能

一小部分源码:

import collectionsobj=collections.Counter('aabbddsafd')             #创建一个counter对象print(obj)-----结果-----Counter({'a': 3, 'd': 3, 'b': 2, 's': 1, 'f': 1})

 

1.most_common()

统计出现次数最多的几个元素

import collectionsobj=collections.Counter('aabbddsafd')print(obj)print(obj.most_common(4))                         #拿到前四位-----结果------[('a', 3), ('d', 3), ('b', 2), ('s', 1)]

 

2.更新update()

import collectionsobj=collections.Counter('aaabb')print(obj)obj.update([11,22,'a'])print(obj)-----结果-----Counter({'a': 3, 'b': 2})Counter({'a': 4, 'b': 2, 11: 1, 22: 1})

 

3.删除元素subtract()

import collectionsobj=collections.Counter('aaabb')print(obj)obj.subtract(['a','11'])print(obj)-----结果-----Counter({'a': 3, 'b': 2})Counter({'a': 2, 'b': 2, '11': -1})

注意:使用subtract()时,如果元素不够扣除,相应元素的个数会以负数的形式展示

 

4.获取元素elements() 

用counter()产生的对象,看上去像一个字典,其实并不是真实的字典,想要取其中的元素,得用elements()去获取

import collectionsobj=collections.Counter('aabbddsafd')for k in obj.elements():    print(k)-----结果-----aaabb..

 

注意:如果想要取出其中key和values,得用dict类中的方法

import collectionsobj=collections.Counter('aabbddsafd')for k,v in obj.items():    print(k,v)-----结果-----a 3b 2d 3s 1f 1

 

二、有序字典OrderedDict()

 创建一个有序字典:

import collectionsdic=collections.OrderedDict()dic['k1']='v1'dic['k2']='v2'dic['k3']='v3'print(dic)-----结果-----OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

 

1.移动到末尾move_to_end()

import collectionsdic=collections.OrderedDict()dic['k1']='v1'dic['k2']='v2'dic['k3']='v3'dic.move_to_end('k1')print(dic)-----结果-----OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])

 

2.删除pop()与popitem()

#pop()import collectionsdic=collections.OrderedDict()dic['k1']='v1'dic['k2']='v2'dic['k3']='v3'dic.pop('k1')print(dic)-----结果-----OrderedDict([('k2', 'v2'), ('k3', 'v3')])#popitem()     import collectionsdic=collections.OrderedDict()dic['k1']='v1'dic['k2']='v2'dic['k3']='v3'dic.popitem()             print(dic)-----结果-----OrderedDict([('k1', 'v1'), ('k2', 'v2')])

对比结果可知,popitem()是去除最后一个元素,且其中不需要加入参数值,pop()是删除指定的元素,其中需要加入参数值,且删除的值可重新生成一个对象

 

3. 设定默认值

import collectionsdic=collections.OrderedDict()dic['k1']='v1'dic['k2']='v2'dic['k3']='v3'dic.setdefault('k4')        #当不指定值的时候,默认为None,效果等同于dic['k4']=Noneprint(dic)-----结果-----OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None)])

 

三、默认字典defaultdict()

作用:定义一个字典,让这个字典的值默认为某个类型

创建一个默认字典:

import collectionsdic = collections.defaultdict(list)     #对字典里值设置为list类型dic['k1'].append('test001')             #append是list类才有的方法,由于设了默认类型,才能用print (dic)-----结果-----defaultdict(
, {'k1': ['test001']})

 

四、可命名元组nametuple()

通常的元组,如果想要访问里面的元素,是只能通过索引去访问,如t[0]。而在可命名元组中,则可以针对每个元素定义一个名字,通过名字去访问相应的名字

注意:在collections包中,可命名元组与其他不同的是:创建计数器、有序字典这些对象时,都是由相应的类产生的,但是,在该包中,没有"可命名元组"这个类,

         想要使用可命名元组,首先得创建一个类。通过nametuple()这个方法,去创建相应的类

import  collectionsMytupleClass=collections.namedtuple('MytupleClass',['x','y','z'])    #创建类MytoupleClassobj=MytoupleClass(11,22,33)                                          #通过类创建了对象,其中x=11,y=22,z=33print(obj.x)print(obj.y)print(obj.z)-----结果-----112233

其中,MytupleClass是创建的类,obj为该类创建的对象,想看查看该类下面有哪些功能,可以使用如下方法:

print(help(MytupleClass))

部分截图如下:

 

五、双向队列deque()

队列是类似于栈一样的一种数据结构

单向队列:先进先出,一端进,另一端出

双向队列:在一端可以进和出,在另一端也可进和出

 

1.添加元素

import collectionsd=collections.deque()d.append('a')                  #从右边添加d.append('b')d.appendleft(1)                #从左边添加d.appendleft(2)print(d)  print(d.count('a'))            #用count()统计元素出现的个数 -----结果-----deque([2, 1, 'a', 'b'])1

 

2.扩展元素

import collectionsd=collections.deque()d.extend(['aa','bb'])          #从右侧扩展d.extendleft([11,22])          #从左侧扩展print(d)-----结果-----deque([22, 11, 'aa', 'bb'])

  

3.获取索引位置

import collectionsd=collections.deque([1,2,3])print(d.index(1))-----结果-----0

 

4.删除

import collectionsd=collections.deque([1,2,3])d.pop()                #从右侧删除print(d)d.popleft()            #从左侧删除print(d) -----结果-----deque([1, 2])deque([2])

 

5.移动元素至首位

import collectionsd=collections.deque([a,b,c])d.rotate(1)          # 把最后一个元素放到首位print(d)-----结果-----deque([c, a, b])

其余一些方法不一一介绍....

 

六、单向队列

单向队列不属于collections包中,而在queue包中

创建一个单向队列

import  queueq=queue.deque()

单向队列的方法在此文中不做介绍 

转载于:https://www.cnblogs.com/nizhihong/p/6641306.html

你可能感兴趣的文章
旁观者效应”是如何毁掉我们的代码的
查看>>
vim常用命令 vim键盘布局
查看>>
开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
查看>>
[转]跟我一起学extjs5(02--建立工程项目)
查看>>
Input Technical Information
查看>>
DB系统预警联系人API
查看>>
tomcat java.net.BindException: Cannot assign requested address 解决方法
查看>>
android批量文件上传(android批量图片上传)
查看>>
Android Intent Action大汇总(转载)
查看>>
Servlet中使用RequestDispatcher调派请求--forware
查看>>
文字排版--字号、颜色(font-size, color)
查看>>
C# 读取JSON
查看>>
一分钟教你知道乐观锁和悲观锁的区别
查看>>
Android 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?
查看>>
[Node.js] 關於 console.log 的格式化輸出
查看>>
Codeforces 558B Amr and The Large Array
查看>>
Python练习笔记——通讯录查询V1.0
查看>>
JS详细图解作用域链与闭包
查看>>
【Chrome】Chrome浏览器怎么查看版本信息
查看>>
VS2008试用版到期解决办法
查看>>