标准库之collections


collections 模块----Python标准库,是数据结构常用模块


常用类型有:


  计数器(Counter)   dict的子类,计算可hash的对象;


  双端队列(deque)  类似于list的容器,可以快速的在队列头部和尾部添加、删除元素;


  默认字典(defaultdict)  dict的子类,可以调用提供默认值的函数;


  有序字典(OrderedDict)  dict的子类,可以记住元素的添加顺序;


  可命名元组(namedtuple)  可以创建包含名称的tuple;


 1 #获取元素个数,返回字典
 2 
 3 >>> from collections import Counter
 4 >>> str='12312312312'
 5 >>> Counter(str)
 6 Counter({'1': 4, '2': 4, '3': 3})
 7 >>> dict(Counter(str))
 8 {'1': 4, '2': 4, '3': 3}
 9 >>> l = [1,2,3,4,5]
10 >>> Counter(l)
11 Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1})
12 >>> d={'d':4,'e':2,'c':7}
13 >>> Counter(d)
14 Counter({'c': 7, 'd': 4, 'e': 2})

most_common(),返回一个列表,包含counter中n个最大数目的元素,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列;
>>> Counter('what do you think you are good').most_common(3)
[(' ', 6), ('o', 5), ('h', 2)]

subtract(),从一个可迭代对象中或者另一个映射(或counter)中,元素相减,类似于dict.update(),但是subtracts 数目而不是替换它们,输入和输出都有可能为0或者为负;

而update() 为相加

>>> c=Counter({'a':3,'b':4,'c':1,'d':-2})
>>> d=Counter({'a':1,'b':2,'c':3,'d':4})
>>> c.substract(d)
>>> c
Counter({'a': 2, 'b': 2, 'c': -2, 'd': -6})

namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。


#
命名元组 # from collections import namedtuple # # p = namedtuple('point', ['x', 'y']) # p1 = p(4,3) # p2 = p(3,4) # print(p1.x) # print(p2.y) # print(p(4,3)) # 双端队列
deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)和insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。
大部分列表的方法在这里也适用
 
# from collections import deque
# l = [1,2]
# dq = deque(l)
# dq.append(3)    # 将3添加到dq的右侧;
# dq.appendleft(0)   # 添加到左侧
# dq.insert(4,5)
# print(dq.pop())    #  移除和返回deque中最右侧的元素
# print(dq.popleft())   #  移除和返回deque中最左侧的元素,
# print(dq)
# dq.clear()  #  清零,元素长度为0
# dq.count(2) # 返回元素的个数

# # 有序的字典 # from collections import OrderedDict # # od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) # print(od) # print(od['b']) # for i in od.items(): # print(i)
defaultdict
使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict 

 注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

 除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。


# 默认字典 # from collections import defaultdict
#
d = defaultdict(lambda : 0)
#
print(d['a']) # 没有a这个键,返回0
原文地址:https://www.cnblogs.com/hhsh/p/9581869.html