一 ,计数器(counter) 

Counter是对字典类型的补充,用于追踪值得出现次数 ps:具备字典的所有功能 + 自己的功能

例: 
>>> from collections import Counter
>>> c = Counter('aadsassdsdads')
>>> print(c)
Counter({'a':4,'d':4,'s':5}) 基本操作方法:
>>> c = Counter('abcdeabcdabcaba') 1.most_common(N)数量从大到小排列,获取前N个元素
>>> c.most_common(3)
[('a', 5), ('b', 4), ('c', 3)] 2.sorted()列出所有不同的元素并排序
>>> sorted(c)
>>> ['a','b','c','d','e'] 3.转换成字符串
>>> ''.join(sorted(c.elements()))
'aaaaabbbbcccdde' 4.取得元素重复次数的值
>>> c['a']
5 5.更新并添加元素重复次数
>>> for elem in 'shazam':
    c[elem] += 1 #每个元素的次数加1
>>> c['a']
7
>>> print(c)
Counter({'a':7,'b':4,'c':3,'d':2,'s':1,'h':1,'z':1,'m':1,'e':1}) 6.update()更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一
>>> d = Counter('simsalabim')
>>> c.update(d)
>>> c['a']
9
>>> print(c)
Countr({'a':9,'b':5,'s':3,'c':3,'m':3,'i':2,'d':2,'h':1,'l':1,'z':1,'e':1}) 7.清空字典
>>> c.clear()
>>> c
Counter() 8.elements()取得计数器中的所有元素,注:此处非所有元素集合,而是包含所有元素集合的迭代器
>>> c = Counter('abcabc')
>>> sorted(c.elements())
['a','a','b','b','c','c'] 9.subtract()相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量
>>> c = Counter('which')
>>> print(c)
Counter({'h':2,'c':1,'w':'1','i':1})
>>> c.subtract('watch')
>>> c['h']
1
>>> c['w']
0
>>> print(c)
Counter({'h':1,'i':1,'w':0,'c':0,'t':-1,'a':-1}) 二, 有序字典(orderedDict)
orderdDict是对字典类型的补充,他记住了字典元素添加的顺序 >>> from collections import OrderedDict
>>> dic = OrderedDict()
>>> dic['k1'] = 'v1'
>>> dic['k2'] = 'v2'
>>> dic['k3'] = 'v3'
>>> print(dic)
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) 基本操作方法: 1.取得字典所有的键
>>> dic.keys() 2.取得字典所有值
>>> dic.values() 3.items() 方法以列表返回可遍历的(键, 值) 元组数组
>>> dic.items()
odict_items([('k1','v1'),('k2','v2'),('k3','v3')]) 4.pop()方法,删除指定的键值
>>> dic.pop('k1')
'v1'
>>> print(dic)
OrderedDict([('k2','v2'),('k3','v3')]) 5.popitem()方法,默认删除字典最后一个元素
>>> dic.popitem()
('k3','v3')
>>> print(dic)
odict_items([('k1','v1'),('k2','v2')]) 6.move_to_end('k')方法将指定键值一道最后
>>> dic.move_to_end('k1')
>>> print(dic)
OrderedDict([('k2', 'v2'), ('k3', 'v3'),('k1', 'v1')]) 7.update()更新字典
>>> dic.update({'k1':'v1111','k10':'v10'})
>>> print(dic)
OrderedDict([('k1', 'v1111'), ('k2', 'v2'), ('k3', 'v3'),('k10','v10')]) 三 , 默认字典 defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。

例:
集合 [11,22,33,44,55,66,77,88,99...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
原生字典解决方法:
 values = [11, 22, 33,44,55,66,77,88,99]
my_dict = {}
for value in values:
  if value>66:
    if my_dict.has_key('k1'):
      my_dict['k1'].append(value)
    else:
      my_dict['k1'] = [value]
  else:
    if my_dict.has_key('k2'):
      my_dict['k2'].append(value)
    else:
      my_dict['k2'] = [value]
默认字典解决方法: 
 from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99]
my_dict = defaultdict(list) #默认将字典设置成列表类型
for value in values:
  if value>66:
    my_dict['k1'].append(value)
  else:
    my_dict['k2'].append(value)
四,可命名元祖(namedtuple) 
根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。 from collections import namedtuple #创建(给元祖命名)
>>> Mytuple = namedtuple('Mytuple',['x','y','z'])
>>> obj = Mytuple(11,22,33) #通过x,y,z取得元祖的值
>>> obj.x 11
>>> obj.y 22
>>> obj.z 33 五,双向队列(deque)
一个线程安全的双向队列 from collections import deque #创建双向队列
>>> d = deque()
>>> d.append('1')
>>> d.append('2') 1.append()向队列中插入数据(从右边插入)
>>> d.append('3')
>>> print(d)
deque(['1','2','3']) 2.appendleft()向队列中插入数据(从左边插入)
>>> d.appendleft('4')
>>> print(d)
deque(['4','1','2','3']) 3.clear()清空队列
>>> d.clear()
>>> print(d)
deque([]) 4.count()计数
>>> d.append('1')
>>> print(d)
deque(['1','2','1'])
>>> d.count('1')
2 5.extend()从右边向队列添加额外元素
>>> d.extend(['qq','ww','ee'])
>>> print(d)
deque(['1','2','qq','ww','ee']) 6.extendleft()从左边向队列添加元素
>>> d.extendleft(['qq','ww','ee'])
>>> print(d)
deque(['qq','ww','ee','1','2']) 7.index()取得元素下标
>>> d.index('1')
0 8.insert()指定位置插入元素
>>> d.insert(1,'nn')
>>> print(d)
deque(['1','nn','2']) 9.pop()从右边移除一个元素
>>> d.pop()
2
>>> print(d)
deque(['1','nn']) 10.popleft()从左边移除一个元素
>>> d.popleft()
1
>>> print(d)
deque(['nn']) 11.remove()移除指定元素
>>> d.remove('1')
>>> print(d)
deque(['2']) 12.reverse()反转队列
>>> print(d)
deque(['1','2'])
>>> d.reverse()
>>> print(d)
deque(['2','1']) 13.rotate()将右边指定的元素个数移到队列左边
>>> d.append('4')
>>> d.append('5')
>>> d.append('6')
>>> print(d)
deque(['1','2','3','4','5','6'])
>>> d.rotate(3)
>>> print(d)
deque(['4','5','6','1','2','3']) 六,单向队列(先进先出 FIFO )
import queue # 创建单向队列
>>> q = queue.Queue() 1.添加元素
>>> q.put('11')
>>> q.put('22') 2.qsize()获取队列中元素个数
>>> q.qsize()
2 3.get()取得元素(先进先出)
>>> q.get()
11
>>> q.get()
22

Python学习——collections系列的更多相关文章

  1. python学习笔记系列----(八)python常用的标准库

    终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...

  2. Python学习笔记系列

    1.小甲鱼 python 学习系列笔记

  3. python学习笔记系列----(一)python简介

    一个月前,就按下决心要系统的学习下python了,虽然之前有学习过java,学习过c++,也能较为熟练的使用java做自动化测试看懂c++里的业务逻辑,但是实际上有那么多的东西自己还是不清楚,今天下定 ...

  4. python学习笔记系列----(三)数据结构

    这一章主要是介绍了python一些常用的数据结构,比如list,tuple,dictionary,set,以及一些实用遍历技巧,主要讲的还是list. 3.1 list 主要介绍了list的一些常用的 ...

  5. python学习笔记系列----(二)控制流

    实际开始看这一章节的时候,觉得都不想看了,因为每种语言都会有控制流,感觉好像我不看就会了似的.快速预览的时候,发现了原来还包含了对函数定义的一些描述,重点讲了3种函数形参的定义方法,章节的最后讲述了P ...

  6. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

  7. python学习笔记系列----(七)类

    7.1 python类和相关术语的简介 Python 通过最小的新语法和语义在语言中实现了类. 它是 C++ 或者 Modula-3 语言中类机制的混合.类的大多数重要特性都被完整的保留下来:类继承机 ...

  8. python学习笔记系列----(六)错误和异常

    python至少有2类不同的错误:语法错误(Syntax Errors)和异常(Exceptions). 8.1 语法错误 这个单词应该还是很有必要认识的,呵呵,语法错误,也叫解析错误,是我们最不愿意 ...

  9. python学习笔记系列----(五)输入和输出

    这一章主要是讲述程序展示其数据的一些方法,一般都是直接按照一定的格式输出在屏幕,或者写入到文件以便以后使用.按照一定格式的输出,在python中实际就是对str的操作,主要就是介绍了formart() ...

随机推荐

  1. JXL导出Excel(只支持xls版本)——(一)

    注意: 导出的后缀是xls可以直接打开,如果导出的后缀是xlsx打开报错,需要手动将名字改为xls才可以打开.也就是JXL不可以导出xlsx的excel. Jar包

  2. float/double 浮点数据*100精度丢失问题

    工作中微信支付碰到的一个问题,金额是float数字,微信参数需要分且必须是整数,所以*100的时候就有问题了 System.out.println(9.9f*100); //989.99994Syst ...

  3. Netty通信原理

    Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端,它极大的简化了TCP和UDP套接字服务器等网络编程. BIO(Blocking IO):每一个请求,一个S ...

  4. nrm安装与使用

    1.什么是nrm nrm是一个npm源管理工具,使用它可以快速切换npm源. 2.安装 使用如下命令安装: npm install -g nrm 安装完后可使用 nrm -V 显示版本,注意是大写V. ...

  5. 【API】API函数创建用户,添加到管理组

    1 学习目标 使用API添加用户可以绕过某些杀毒软件的限制. 2 编程思路 2.1 代码原理 使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个A ...

  6. ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity

    1.前言 Atomicity是内存访问的一个属性,描述为原子性访问,包括single-copy atomicity和multi-copy atomicity 2.基本概念 observer 可以发起对 ...

  7. uboot中的快捷菜单的制作说明 【转】

    转自:http://blog.chinaunix.net/uid-22030783-id-366971.html   在uboot中加入快捷操作菜单的方法非常简单,在论坛发布的uboot201003V ...

  8. python计算最大公约数和最小公倍数

    a=4 b=2 def gcd(a,b): return a if b==0 else gcd(b,a%b) def lcm(a,b): return a*b//gcd(a,b) print(gcd( ...

  9. Mashup

    简介 mashup是糅合,是当今网络上新出现的一种网络现象,将两种以上使用公共或者私有数据库的web应用,加在一起,形成一个整合应用.一般使用源应用的API接口,或者是一些rss输出(含atom)作为 ...

  10. centos中创建自动备份Mysql脚本任务并定期删除过期备份

    背景: OA系统数据库是mysql,引擎为myisam,可以直接通过拷贝数据库文件的方式进行备份 创建只备份数据库的任务: 创建保存mysql数据库备份文件的目录mysqlbak mkdir /hom ...