Datehoer的博客
我本将心向明月,奈何明月照沟渠
Datehoer的博客

当前位置:主页 > 技术分享 > python collections库

python collections库

浏览: 作者:Datehoer 发布日期:2020-12-01 18:47:37 来源: 原创
今天在看《流畅的python》的时候,在第一章就遇到了没见过的库了,很尴尬,所以百度查了一下collections库。
这个collections库相当于是一个仓库,里面储存了一些常用的集合类,也就是一个集合,把一些本来需要自己定义的类整合到了一起,这样直接使用collections库就行了。
其中内置的类有:

  • namedtuple

  • 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是一个定义出来的函数,通过它来创建一个自创的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

版权:本文由Datehoer原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接本文链接:https://zjzdmc.top/jsfx/73.html。

文章推荐

热门标签

返回顶部
下面为相关推荐
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!