collections是Python内建的一个集合模块,提供了许多有用的集合类。

本文将介绍以下几种方法:

namedtuple

Counter()

deque

OrderedDict

一、namedtuple

namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,可以用属性而不是索引来引用tuple的某个元素。

因为tuple是不可变类型,所以用namedtuple定义出来的对象经过初始化以后,对象的属性是不可以改变的。

>>> from collections import namedtuple
>>> Stu = namedtuple("Student",["name","age","score"])
>>> s = Stu("张三",17,450)
>>> s
Student(name='张三', age=17, score=450)
>>> s.name
'张三'
>>> s.score
450
>>> s.age
17
>>> s.age=30
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
s.age=30
AttributeError: can't set attribute
>>>

  验证对象s是Stu的对象,也是tuple的一种子类

>>> isinstance(s,Stu)
True
>>> isinstance(s,tuple)
True

  同样的,如果要表示一个四边形的宽高:

>>> TR = namedtuple("TR",["width","height"])
>>> t = TR(10,20)
>>> t
TR(width=10, height=20)
>>> t.width
10
>>> t.height
20

二、Counter()

Counter是一个简单的计数器,用来统计一个字符串中每个字符出现的次数。

>>> from collections import Counter
>>> c = Counter()
>>> c
Counter()
>>> for x in "whoami I am you":
c[x] += 1
>>> c
Counter({' ': 3, 'o': 2, 'a': 2, 'm': 2, 'w': 1, 'h': 1, 'i': 1, 'I': 1, 'y': 1, 'u': 1})
>>> for x in c:
print(x,c[x])
w 1
h 1
o 2
a 2
m 2
i 1
3
I 1
y 1
u 1

  用c.key排序再删除:

>>> for x in sorted(c.keys()):
print(x,c[x])
3
I 1
a 2
h 1
i 1
m 2
o 2
u 1
w 1
y 1

  

三、deque

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是高效实现插入和删除操作的双向list,适合用于栈和队列

>>> from collections import deque
>>> l = [1,4,9,-10]
>>> q = deque(l)
>>> q
deque([1, 4, 9, -10])
>>> q.append(100)
>>> q.pop()
100
>>> q.appendleft(0)
>>> q
deque([0, 1, 4, 9, -10])
>>> q.popleft()
0
>>> q
deque([1, 4, 9, -10])

 除了实现list的append()pop()外,还支持appendleft()popleft(),可以非常高效地往头部添加或删除元素。

四、OrderedDict

使用dict时,Key是无序的。如果要保持Key的插入顺序,可以用OrderedDict,OrderedDict的Key会按照插入的顺序返回,不是Key本身排序。

>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> list(od.keys()) # 按照插入的Key的顺序返回
['z', 'y', 'x']

  

Python collections的使用的更多相关文章

  1. python collections defaultdict

    class_counts  = defaultdict(int) 一.关于defaultdict 在Python里面有一个模块collections,解释是数据类型容器模块.这里面有一个collect ...

  2. Python collections模块总结

    Python collections模块总结 除了我们使用的那些基础的数据结构,还有包括其它的一些模块提供的数据结构,有时甚至比基础的数据结构还要好用. collections ChainMap 这是 ...

  3. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  4. Python Collections详解

    Python Collections详解 collections模块在内置数据结构(list.tuple.dict.set)的基础上,提供了几个额外的数据结构:ChainMap.Counter.deq ...

  5. python collections模块

    collections模块基本介绍 collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型 namedtuple() factory function f ...

  6. Python collections 模块用法举例

    Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...

  7. Python collections.defaultdict 笔记

    其实defaultdict 就是一个字典,只不过python自动的为它的键赋了一个初始值.这也就是说,你不显示的为字典的键赋初值python不会报错,看下实际例子. 比如你想计算频率 frequenc ...

  8. Python collections.defaultdict() 与 dict的使用和区别

    看样子这个文档是难以看懂了.直接看示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import collections s = [('yellow', ...

  9. Python collections.OrderedDict解决dict元素顺序问题

    编程中遇到个问题,python json.loads时元素顺序可能会发生变化. 这个对于一些需要使用元素顺序来做一些策略的代码来说是致命的. 在网上查了查,结合自己的知识总结一下. 使用dict时,K ...

  10. Python: collections.nametuple()--映射名称到序列元素

    问题:  通过下标访问列表或者元组中元素 answer: collections.namedtuple()通过使用元组对象来解决这个问题 这个函数实际上是一个返回Python中标准元组类型子类的一个工 ...

随机推荐

  1. linux bash算术运算

    +, -, *(乘), /(除), **(乘方), %(取模) let var=算术运算符表达式 var=$[算术运算符表达式] var=$((算术运算符表达式)) var=$(expr $ARG1 ...

  2. OpenLayers测量距离和面积

    <!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equ ...

  3. java使用正则表达式,去除windows系统中文件名的非法路径

    w哦我爬取一个页面,并且把附件下载下来,保存,有的时候文件名,带*号,所以,无法保存 这时候就要删除所有的非法字符 String fileName = resourceName + fileTypt; ...

  4. 解决github下载慢的终极方法

    直接用ssr代理,使用全局代理. 下载墙外的软件,都可以,比如 GithubDsktop

  5. Orleans 整体介绍

    背景 Orleans 是微软开源的Actor模型开发框架. Actor模型 此模型解决了并发编程时对资源竞争使用的问题,将对同一个业务数据的访问从并行变为串行执行,降低了多线程编程的难度,使普通编程人 ...

  6. PHP快速导出Excel文件 (采用xlsx Writer)

    <?php include_once("xlsxwriter.class.php"); ini_set('display_errors', 0); ini_set('log_ ...

  7. 高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用

    在消息队列中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺.如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性.但其实可能后面几 ...

  8. day1---转自金角大王

    金角大王等待唐僧的日子 Yesterday, when I was young, There were so many songs that waited to be sung. 博客园 首页 新随笔 ...

  9. 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群

    目前阿里云云原生产品家族已经支持多集群管理功能,允许使用阿里云容器服务Kubernetes(简称ACK)控制台或kubectl命令接入.统一纳管其他公有云.客户IDC自建K8s集群,集中管理部署K8s ...

  10. JS 里的数据类型转换

    JS的数据类型转换 一.js中的数据类型Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 1.Number Number数据类型指 ...