python模块之collections
我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
(1)namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
(2)deque: 双端队列,可以快速的从另外一侧追加和推出对象
(3)Counter: 计数器,主要用来计数
(4)OrderedDict: 有序字典
(5)defaultdict: 带有默认值的字典
=>namedtuple(typename, field_names, verbose=False, rename=False)
比如我们用户拥有一个这样的数据结构,每一个对象是拥有三个元素的tuple。
使用namedtuple方法就可以方便的通过tuple来生成可读性更高也更好用的数据结构
wdebsites = [
('Sohu', 'http://www.google.com/', '张朝阳'),
('Sina', 'http://www.sina.com.cn/', '王志东'),
('163', 'http://www.163.com/', '丁磊')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in websites:
website = Website._make(website)
print (website)
Result:
Website(name='Sohu', url='http://www.google.com/', founder='张朝阳')
Website(name='Sina', url='http://www.sina.com.cn/', founder='王志东')
Website(name='163', url='http://www.163.com/', founder='丁磊')
=>deque(iterable,maxlen)
deque其实是double-ended queue的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列头部快速增加和取出对象: .popleft(), .appendleft()。原生的List也能从头部添加和去除对象,l.insert(0, v)、l.pop(0)。但是值得注意的是,list对象的这两种用法的时间复杂度是O(n),也就是说随着元素数量的增加耗时呈线性上升。而使用deque对象则是O(1) 的复杂度,所以当你的代码有这样的需求的时候,一定要记得使用deque。
作为一个双端队列,deque还提供了一些其他的好用方法,比如 rotate等。
append(x):从队列末尾添加x
appendleft(x):从队列头部添加x
clear():清空队列
count(x):返回队列中x的数量
extend(iterable):在队列的尾部添加多个元素
extendleft(iterable):在队列的头部添加多个元素,反序插入(字母表相反顺序)
pop():将尾部一个元素移除
popleft():将头部一个元素移除
remove(x):将队列中第一次出现的x元素移除
reverse():将队列元素逆置
rotate(n):将队列尾部的n个元素添加到头部 rotate(1)等价于:d.appendleft(d.pop())
D.maxlen:返回队列的长度,如果是无界则返回None(定义的时候可以指定maxlen,否则默认是无界队列)
Example:
>>>d=collections.deque("gsgwqeasas")
>>> d
deque(['g', 's', 'g', 'w', 'q', 'e', 'a', 's', 'a', 's'])
>>> s=list(d)
>>> s
['w', 'g', 'g', 's', 'a', 's', 'a', 'e', 'q']
=>Counter(iterable or mapping) #可迭代或者映射的对象
计数器是一个非常常用的功能需求。
elements():返回一个重复元素的迭代器,重复次数和计数的次数一样多。元素以任意顺序返回。如果一个元素的计数小于1,elements()会忽略它。
most_common([n]):返回n个计数器元素,若未指定n,则返回计数器的所有元素
update(iterable or mapping):增加计数器元素,元素可以来源于迭代对象或者一个Counter对象
Example:
>>> s
['w', 'g', 'g', 's', 'a', 's', 'a', 'e', 'q']
>>> c=collections.Counter(s)
>>> c
Counter({'g': 2, 'a': 2, 's': 2, 'e': 1, 'q': 1, 'w': 1})
>>> list(c)
['e', 'q', 'g', 'w', 'a', 's']
>>> dict(c)
{'a': 2, 'q': 1, 'g': 2, 'w': 1, 'e': 1, 's': 2}
>>> list(c.elements())
['e', 'q', 'g', 'g', 'w', 'a', 'a', 's', 's']
>>> c.most_common(4)
[('g', 2), ('a', 2), ('s', 2), ('e', 1)]
>>> c.update('fds')
>>> c
Counter({'s': 3, 'g': 2, 'a': 2, 'e': 1, 'q': 1, 'w': 1, 'f': 1, 'd': 1})
>>> c.update(c)
>>> c
Counter({'s': 6, 'g': 4, 'a': 4, 'e': 2, 'q': 2, 'w': 2, 'f': 2, 'd': 2})
>>>
=>OrderedDict(items)
在Python中,dict这个数据结构由于hash的特性,是无序的,这在有的时候会给我们带来一些麻烦, 幸运的是,collections模块为我们提供了OrderedDict,当你要获得一个有序的字典对象时,用它就对了。
popitem(last=True):移除字典对象元素,last=True时“后进先出”,last=False时“先进先出”
move_to_end(key,last=True):将字典中一个已经存在的键移动到头部或者尾部。last=True时,移动到尾部,last=False时,移动到头部。
Example:
>>> d
{'w': 2, 'a': 4, 'f': 2, 'q': 2, 'g': 4, 'd': 2, 'e': 2, 's': 6}
>>> n=collections.OrderedDict(d)
>>> n
OrderedDict([('w', 2), ('a', 4), ('f', 2), ('q', 2), ('g', 4), ('d', 2), ('e', 2), ('s', 6)])
>>> n.popitem()
('s', 6)
>>> n
OrderedDict([('a', 4), ('f', 2), ('q', 2), ('g', 4), ('d', 2), ('e', 2)])
>>> n.move_to_end('f')
>>> n
OrderedDict([('a', 4), ('q', 2), ('g', 4), ('d', 2), ('e', 2), ('f', 2)])
=>defaultdict
我们都知道,在使用Python原生的数据结构dict的时候,如果用 d[key] 这样的方式访问, 当指定的key不存在时,是会抛出KeyError异常的。
但是,如果使用defaultdict,只要你传入一个默认的工厂方法,那么请求一个不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值。
Example:
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
d[k].append(v)
>>> list(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> m =dict()
>>> m["a"]
Traceback (most recent call last):
File"<stdin>", line1,in<module>
KeyError: "a"
>>>
>>> m =collections.defaultdict(int)
>>> m["a"]
0
>>> m["b"]
0
>>> m =collections.defaultdict(str)
>>> m["a"]
""
>>> m["b"]+="a"
>>> m["b"]
"a"
>>> m =collections.defaultdict(lambda:"[default value]")
>>> m["a"]
"[default value]"
>>> m["b"]
"[default value]"
python模块之collections的更多相关文章
- python模块介绍- collections(5)-OrderedDict 有序字典
1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...
- Python模块:collections
collections模块常用的数据类型: (1)namedtuple(): #创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素. fr ...
- python模块之collections random
collections 在内置数据类型(list, dict, tuple, set)的基础上,collections提供了几个额外的数据类型: Counter, deque, Orderdict, ...
- python模块之collections模块
计数器 Counter 计数元素迭代器 elements() 计数对象拷贝 copy() 计数对象清空 clear() from collections import Counter #import ...
- 【转】python模块分析之collections(六)
[转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- Python自建collections模块
本篇将学习python的另一个内建模块collections,更多内容请参考:Python学习指南 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtupl ...
- python拓展2 collections模块与string模块
知识内容 1.collections模块介绍 2.collections模块使用 3.string模块介绍及使用 一.collections模块介绍 collections模块中提供了很多python ...
- Python标准库——collections模块的Counter类
1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...
随机推荐
- Unity3D 材质球设置参数无效果的解决方法
要设置shader里有下划线的属性名,而不是后面字符串的属性名. Color tmp = ,,,alpha); mat.SetColor("_Color", tmp);
- Android自定义View
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24252901 很多的Android入门程序猿来说对于Android自定义View ...
- 【MySQL】MySQL快速插入大量数据
起源 在公司优化SQL遇到一个索引的问题,晚上回家想继续验证,无奈没有较多数据的表,于是,想造一些随机的数据,用于验证. 于是 于是动手写.由于自己不是MySQL能手,写得也不好.最后,插入的速度也不 ...
- linux环境下安装mysql数据库遇到的问题
总结一句话: 安装完mysql数据库记得授权远程登录. 坑的现象: ERROR 1045 (28000): Access denied for user 'guoxp'@'localhost' ( ...
- 【Unity3D游戏开发】之全局管理类的几种方式 (十六)
如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...
- python __file__ 与argv[0]
在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和__file__. sys.argv[0] 获取主执行文件路径的最佳方法是用sys.argv[0],它可能是一个相对路径,所以 ...
- 《BI项目笔记》创建父子维度
创建步骤: 而ParentOriginID其实就是对应的ParentOriginID,它的 Usage 必须是 Parent 才能表示这样的一个父子维度. 查看OriginID属性, Usage 是 ...
- 基础向量运算-2D镜面反射
如图M为镜面,A为入射光,B为反射光,已知A与M的向量坐标,求B的向量表示. 我们添加辅助向量C. 有以下性质. B = 2 * C - A. [1] |C| = |A| * cos(alpah).A ...
- 做完c语言作业的心得
算是第一次自己接触c语言,并不是很深入的了解了,但也完成了第一次课的作业.在没有复制粘贴的情况下,8遍的简单编程让我记下了它基本的格式. 实验1.2.3.7都是基本的输入字,和课上的练习差不多,巩固最 ...
- WampServer Version 2.5 bug修改
做PHP开发都需要安装PHP的运行环境,为了方便,网上可以下载到好多的集成环境,最近使用WampServer Version 2.5发现有一些bug,分享一下修改的方法.高手请路过. 1.echo d ...