Python学习笔记(4):collections

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

简介

collections模块提供了Python的通用内置容器,dict,list,set和tuple。此外,该模块还提供了一些基类用来验证一个类是否是特定的接口。接下来我们来具体介绍这个模块下的所包含的对象及方法。

Counter object

这是Python提供给我们的一个方便高效的计数工具。
Counter是dict的子类,用来统计hashable object的数量。它将对象存储为key,对象的个数存储为value,value可以是任意整数。Counter是一个无序集合。
Counter的初始化方法有以下4种:

a = Counter()
b = Counter('gallahad')
c = Counter({'red': 4, 'blue': 2})
d = Counter(cats=4, dogs=8)

如果匹配不到key值,Counter会返回0而不是抛出KeyError异常。
如果将某个key的值置为0,Counter并不会删除这个key,想要从Counter中移除这个对象,需要用del b['a'],来看一个例子:

b = Counter('gallahad')
print(b)
b['a'] = 0
print(b)
del b['a']
print(b)

这里写图片描述

Counter对象的方法

Counter对象提供了三个方法。

  • elements()方法
    返回个数大于0的元素,每个元素返回value个。
  • most_common([n])方法
    返回元素的值从大到小的n个元素,如果n省略或者为None,则返回全部元素。个数相同的元素随机排序。
  • subtract([iterable-or-mapping])方法
    减去另一个Counter中的元素数量,输入输出均有可能为负数或0。

Counter对象不能使用的dict的方法

大部分dict提供的方法Counter对象是可以使用的,除了以下两个:

  • fromkeys(iterable)
  • update([iterable-or-mapping])

deque object

deque([iterable[, maxlen]])
deque是一个双向队列,定义时可以对其进行初始化,需要传入一个iterable。初始化时数据的顺序是从左到右进行append。如果不指定iterable,deque默认为空。
deque支持的方法如下:

  • append(x):将x加到指定deque右侧
  • appendlift(x):将x加到指定deque左侧
  • clear(x):清空deque
  • count(x):统计deque中与x相等的元素个数
  • extend(iterable):把iterable追加到指定deque右侧
  • extendleft(iterable):把iterable加到指定的的确左侧,倒序增加
a = deque((0, 1, 2, 3, 4, 5, 6, 7, 8, 7))
print a
b = (9, 3, 5, 1, 6, 5)
a.extendleft(b)
print a

结果:
这里写图片描述
通过上面这个例子也许可怜更好地理解extendleft方法

  • pop():移除并返回最右侧的元素,如果没有,抛出IndexError异常
  • popleft():移除并返回最左侧的元素,如果没有,抛出IndexError异常
  • remove(value):移除第一个匹配到value的元素,如果没有,抛出ValueError异常
  • reverse():转置指定deque并返回None
  • rotate(n):执行n次d.appendleft(d.pop())
    deque支持一个只读的属性:maxlen最大的大小,如果没有指定,返回None。

deque应用

def tail(filename, n=10):
    return deque(open(filename), n)

上面这段代码可以返回文件的最后n行。

defaultdict object

defaultdict([default_factory[, …]])
defaultdict是dict的子类,它重写了一个方法,增加了一个实例变量。
初始化时第一个参数为默认的元素value类型。
defaultdict支持的方法:
__missing__(key):
如果default_factory是None,抛出KeyError异常;如果default_factory不是None,key对应的value为空,则将这个value插入default_factory中,并返回。

OrderedDict object

OrderedDict([items])
OrderedDict支持的方法:
popitem(last=True):
popitem方法移除并返回OrderedDict中的一个键值对,如果last=True,则按LIFO(last in first out)的顺序返回;如果last=False,则按FIFO(first in first out)的顺序返回。

猜你喜欢

转载自blog.csdn.net/K_Ohaha/article/details/79029366