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 条评论
登录 后参与评论

相关文章

来自专栏java学习

java每日一练(2017/8/11)

查看以前的所有练习题目以及答案:https://mp.weixin.qq.com/mp/homepage?__biz=MzA5MTMyNTI0Nw==&hid=...

2816
来自专栏GreenLeaves

Js正则Replace方法

JS正则的创建有两种方式: new RegExp() 和 直接字面量。 //使用RegExp对象创建 var regObj = new RegExp("(^\s...

31710
来自专栏破晓之歌

如何创建对象以及jQuery中创建对象的方式(推荐)

在实际使用当中,字面量创建对象虽然很有用,但是它并不能满足我们的所有需求,我们希望能够能够和其他后台语言一样创建一个类,然后声明类的实例就能够多次使用,而不用每...

912
来自专栏xx_Cc的学习总结专栏

OC-基础总结(一)

34211
来自专栏闻道于事

Java之数据类型,变量赋值

Java中的基础数据类型(四类八种):   1.整数型     byte----使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值...

3325
来自专栏转载gongluck的CSDN博客

野指针分析

1. 野指针的概念   所谓的野指针,就是说指针指向的那块内存,你没有合法操作的权限,也就是指针指向非法的内存空间,这样的指针就叫做野指针。 2. 野指针产...

3757
来自专栏java一日一条

java提高篇之关键字static

在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员...

742
来自专栏Laoqi's Linux运维专列

文件类型+变量+数值字符串

1826
来自专栏机器学习从入门到成神

一道快速排序题的解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

861
来自专栏我和我大前端的故事

啊,函数呐!!!

一份需要你补充完整的函数导图!我还是一个初学者,这篇文章是我所知道的所有关于函数的知识,如有不完善或者错误,希望能够在评论下方指出,哈哈哈,大神勿喷。

742

扫码关注云+社区