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. 20190719-FirstZero

    这也许也是一个成就吧? First Zero 考试 第一次 爆0 好了好了. T1 你永远不知道你在想什么. 我仿佛想出一个$\Theta(NM\log^2 N)$的$dfs$??? 蒟蒻原地爆炸 T ...

  2. 直接在安装了redis的Linux机器上操作redis数据存储类型--对key的操作

    一.概述:   前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与Key关 ...

  3. A Simple Problem with Integers POJ - 3468 (线段树)

    思路:线段树,区间更新,区间查找 #include<iostream> #include<vector> #include<string> #include< ...

  4. swagger暴露程序接口文档

    Swagger2是一个帮助用户.团队.企业快速.高效.准确地生产API服务的工具组件,同时还提供了部分测试功能,它的官方网站是https://swagger.io/. 1.引入Maven <de ...

  5. Laravel 中 offset,limit 或 skip , take 的使用

    laravel 本身有一个自带的快速分页方法 paginate,只需要传入每页显示多少条数据就可以 了,但是如果想使用自定义从哪里开始呢. 一.offset,limit (offset 设置从哪里开始 ...

  6. onethink上传到服务器(或者迁移)后台登录验证码错误问题

    修改Application\User下面的配置文件config.php, 改成对应服务器上的参数 define('UC_DB_DSN', 'mysqli://root:root@127.0.0.1:3 ...

  7. 【机器学习PAI实战】—— 玩转人工智能之综述

    摘要: 基于人工智能火热的大背景下,通过阿里云的机器学习平台PAI在真实场景中的应用,详细阐述相关算法及使用方法,力求能够让读者读后能够马上动手利用PAI搭建属于自己的机器学习实用方案,真正利用PAI ...

  8. ThinkPHP中_after_update、_before_update等的用法

    https://blog.csdn.net/aslackers/article/details/50339163 TP系统\Think\Model类里隐藏了几个有用的方法: _before_inser ...

  9. Directx11教程(3) 一个最基本D3D应用程序(1)

    原文:Directx11教程(3) 一个最基本D3D应用程序(1)       在前一篇教程程序代码的基础上,这次我们将增加2个类: InputClass,键盘处理的代码将放在这个类里面,Graphi ...

  10. com.alibaba.dubbo.remoting.TimeoutException

    maven项目 update clean install 重启 服务消费者