Python入门之collections模块

109 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

1.命名元组 (namedtuple)

Python 中提供了基础的不可变数据结构元组tuple,对元组元素的访问需通过索引来完成,对此需要熟记每个下标对应的具体含义。如果元素数量一多,要记清楚这些东西就会比较麻烦了,于是就出现了命名元组namedtuple

2.创建命名元组

命名元组的构造函数接受两个参数typenamefield_names

  • typename:元组的名字;
  • field_names:元组各个元素的名称,也就是属性名称。

3.计数器(Counter)

计数器是一个无序容器,用于记录各种值出现的次数。它采用键值对的形式存储,要记录的值作为key,这个值出现的次数作为valuevalue值可正可负。
#####创建计数器
要创建一个计数器实例,可以调用它的无参构造函数:

c = collections.Counter()  

这样就创建了一个空的计数器实例c

也可以从listtupledict,字符串等**可迭代对象(iterable)**创建:

c = collections.Counter(['a','a','b','b','c']) #从list创建  c = collections.Counter(('a','a','b','b','c')) #从tuple创建  c = collections.Counter({'a':2,'b':2,'c':1}) #从dict创建  c = collections.Counter("aabbc") #从字符串创建  
4.增加计数与减少计数

要改变计数器中某一元素的值,除了可以使用操作dict的方式:c.a = XXX外,计数器还提供了两个成员函数updatesubt\fract

update函数接受一个可迭代对象,然后将这个对象中各种值出现的次数到计数器中,比如:

c.update("aabbcd") #字符串也是可迭代对象  

subtract函数与update函数类似,不过它是从计数器中减去可迭代对象中各种值出现的次数,比如:

c.subtract("aabbcd")  

5.双向队列 (deque)

双向队列是一种能在队列两端都进行入队、出队操作的数据结构,比普通的队列更加灵活也更加复杂。

6.创建双向队列

就像计数器Counter,双向队列可以调用无参构造函数创建一个空队列,也可以使用可迭代对象创建,并初始化一个队列。

7.队列操作

双向队列与list类似,也有appendpop这两个成员函数,他们的作用分别是向队列的右边增加元素和从队列的右边删除并返回一个元素

8.有序字典 (OrderedDict)

有序字典和普通的dict基本上是相似的,只有一点不同,那就是有序字典中键值对的顺序会保留插入时的顺序

9.创建有序字典

有序字典的创建方法和普通的dict类似,不过由于多了保留顺序的功能,因此在使用可迭代对象创建有序字典时,可以对它先排个序,让创建出来的字典元素也是有序的

10默认字典 (defaultdict)

默认字典的功能与dict基本相同,但在访问一个不存在的key时,默认字典会提供一个默认值,而不是引发异常。
#####创建默认字典
默认字典的构造函数接受一个工厂函数default_factory作为参数,可以将一个类型名看做是一个工厂函数,比如listtuplestr等。
这个函数会在要生成默认值的时候无参调用,如果使用类型名作为工厂函数,则这个类型必须要有无参构造函数