今天在看《流畅的python》的时候,在第一章就遇到了没见过的库了,很尴尬,所以百度查了一下collections库。
这个collections库相当于是一个仓库,里面储存了一些常用的集合类,也就是一个集合,把一些本来需要自己定义的类整合到了一起,这样直接使用collections库就行了。其中内置的类有:namedtupl deque defaultdict OrderedDict Counter namedtuple

其中namedtuple是一个工厂函数,通过它来构造一个带字段名的元组,比如说坐标,namedtuple的具名元组的实例和普通元组消耗的内存是一样多的,这是因为字段名都被存在了对应的类里面。但是这个类跟普通的对象实例比起来也要小一些的,因为 Python 是不会使用 dict 存存这些实例的属性。我们都知道tuple以表可示不变集合,例如,一个点的二维坐标就可以表示成p = (1, 2),但是我们如果只看(1,2)的话,是和很难感觉出这是坐标的。如果我们定义一个类的话,虽然可以明确的表达出来(1,2)是一个坐标,但是未免有点杀鸡用牛刀了,有点小题大做。这个时候 namedtuple就应命运而生了。
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x)#1
print(p.y)#2

namedtuple

namedtuple是一个定义出来的函数,通过它来创建一个自创的tuple对象,并且规定了tuple元素的数量,而且可以使用属性而不是索引来调用tuple的某个元素,如此,我们使用namedtuple就看可以 非常方便的定义一种数据类型了,它他又tuple的不变性,并且能根据属性来调用 ,所以它的应用非常广泛,使用起来非常的方便。

deque在使用list储存数据的时候,发现按照索引访问元素的时候很快,但是如果插入或删除元素的话,就很慢了。这是因为什么呢?因为list是线性存储,所以它在数据量很大的时候,插入或删除的效率都是很低的。
deque是一个为了实现插入或删除操作时都很快的函数,它为了高校实现插入和删除操作的双向列表,很适合于队列和栈。deque除了实现你了list的删除和增加,它还支持appendleft()和popleft(),因为前文说过它是为了提高效果,而支持这两个函数的话就会非常高效的操作列表了。

defaultdict

在使用dict的时侯,如果我们要引用的Key是不存在的话,那么程序就会抛出异常--KeyError。但是假如我们希望如果key不存在的时候,程序返回的是一个默认值,那我们就可以用defaultdict。
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
print(dd['key1'])#'abc'
print(dd['key2'])#key2不存在,返回默认值#'N/A'

当然,我们要使用这个函数的时候,记得要在最前面定义一下如果不存在的时候返回什么默认值。

Counter

Counter它是一个很简单的计数器,功能还挺多,比如说统计字符出现的个数。这个是常规的方法colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
result = {}
for color in colors:
if result.get(color)==None:
result[color]=1
else:
result[color]+=1
print (result)

{'red': 2, 'blue': 3, 'green': 1}

而我们使用counter呢?
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
c = Counter(colors)
print (dict(c))#{'red': 2, 'blue': 3, 'green': 1}

OrderedDict

如果我们想要保持字典的顺序的话,可以使用一下OrderedDict,通过OrderedDict就可以保持字典的顺序。
import collections
print "Regular dictionary"
d={}
d['a']='A'
d['b']='B'
d['c']='C'
for k,v in d.items():
print k,v
print "nOrder dictionary"
d1 = collections.OrderedDict()
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d1['1'] = '1'
d1['2'] = '2'
for k,v in d1.items():
print k,v

好了,以上就是一些collections常出现的一些集合类了,其余的还是需要自己查询得,推荐可以通过.py文件来进行阅读。如果有什么不懂的可以在评论区留言,我会在看到的时候进行回复的。推荐阅读官方文档---https://docs.python.org/zh-cn/3/library/collections.html

本文作者:博主:     文章标题:python collections库
本文地址:https://zjzdmc.top/jsfx/73.html     
版权说明:若无注明,本文皆为“Datehoer的Blog-个人博客-技术分享”原创,转载请保留文章出处。
最后修改:2021 年 04 月 20 日 08 : 39 AM
如果觉得我的文章对你有用,请随意赞赏