python学习笔记7.3-内建模块collections

Python的内建模块collections为我们提供了一系列的优化操作,本质上就是元组、字典、集合、列表的特殊功能版。

1. namedtuple

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

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。需要注意的是它返回的是一个数据类型。

from collections import namedtuple

People = namedtuple('People', ['name', 'age', 'sex'])

libai = People('libai', '22', 'male')
print(libai)
print(libai.name)

print(isinstance(libai, People))

打印结果:

People(name='libai', age='22', sex='male')
libai
True

2. deque

从字面上看出来,deque就是一个队列,不过它是双向的,也就是能从两端添加元素。 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

from collections import deque

d = deque(['1', '2', '3'])
print(d.pop())
print(d.popleft())
d.append('5')
d.appendleft('6')
print(d)

打印结果:

3
1
deque(['6', '2', '5'])

从结果可以看出,它是一个双向队列。

3. defaultdict

from collections import defaultdict
dict = defaultdict(lambda: None)
print(dict)
dict['key1'] = 'hhhh'

print(dict['key2'])

key2 这个键值本来是不存在的呢,如果是普通的字典,就会报错,但是用了defaultdict就会返回一个默认值。 注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

4. OrderedDict

究其本意,有序字典。在普通字典中, 字典keys是没有顺序的,在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict。所谓顺序是指key插入的顺序,也就是谁先插入谁就在前面。

from collections import OrderedDict
dict = OrderedDict()
dict['key1'] = 'a'
dict['key2'] = 'b'
print(dict)
print(dict.keys())

打印结果:

OrderedDict([('key1', 'a'), ('key2', 'b')])
odict_keys(['key1', 'key2'])

5. Counter

Counter是一个简单的计数器,统计字符出现的个数:

from collections import Counter

a = ['a', 'f', 'ffff', 'f']
print(Counter(a))
print(Counter(a)['f'])

打印结果:

Counter({'f': 2, 'a': 1, 'ffff': 1})
2

从打印的结果来看,Counter其实是一个字典类型,keys是统计的元素,values是出现的次数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

异或的应用 及剑指offer 面试 40 数组中只出现一次的数字

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27568975

592
来自专栏前端布道

图解javascript this指向什么?

JavaScript 是一种脚本语言,支持函数式编程、闭包、基于原型的继承等高级功能。JavaScript一开始看起来感觉会很容易入门,但是随着使用的深入,你会...

3959
来自专栏偏前端工程师的驿站

Java魔法堂:String.format详解

  目录                               一、前言 二、重载方法 三、占位符 四、对字符、字符串进行格式化 五、对整数进...

1918
来自专栏微信公众号:Java团长

Java基础02 方法与数据成员

在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(object)。对象中的数据成员表示对象的状态。对象可以执行方法,表示特定的动作。

532
来自专栏决胜机器学习

从机器学习学python(三) ——数组冒号取值与extend

从机器学习学python(三)——数组冒号取值与extend (原创内容,转载请注明来源,谢谢) 一、数组冒号取值 1、 小白级别 python的特有取值方式...

2714
来自专栏Python疯子

python数据清洗

数据的质量直接关乎最后数据分析出来的结果,如果数据有错误,在计算和统计后,结果也会有误。 所以在进行数据分析前,我们必须对数据进行清洗。需要考虑数据是否需要修...

792
来自专栏nummy

numpy入门

numpy中最主要的对象是同质数组array,也就是说数组中的元素类型都是一样的。数组的维度也称之为axis,axis的的个数称之为秩rank。

592
来自专栏运维技术迷

连仕彤博客[Python笔记] 判断0-9数字在字符串中出现的次数

要求 给定一些数字(0-9范围之间),判断数字在字符串中出现的次数。 例子的排序是依照算法的效率(时间复杂度)从低到高 例子1   # 定义数字 num = ...

3897
来自专栏java一日一条

JavaScript 函数式编程中的 curry 实现

最近在学习javascript函数式编程,对其中大名鼎鼎的curry十分感兴趣,curry函数可以接受一个函数,我们暂且称之为原始函数,返回的也是一个函数,柯里...

574
来自专栏zaking's

用js来实现那些数据结构02(数组篇02-数组方法)

    上一篇文章简单的介绍了一下js的类型,以及数组的增删方法。这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么。由于...

35311

扫码关注云+社区