一:namedtuple()
namedtuple
是一个函数,它用来创建一个自定义的tuple
对象,并且规定了tuple
元素的个数,可以用属性而不是索引来引用tuple
的某个元素。自定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。创建的对象是tuple
的一种子类
import collections
Circle =collections.namedtuple('Circle', ['x', 'y', 'r'])
p = Circle(1,2,0)
print(p.r)
>>>输出:0
二:deque()
定义双向列表,实现队列、栈的结构。操作包含:.append()、.appendleft()、.pop()、.popleft()。
当通过maxlen=3设置长度时,增加元素超过限制的长度时,会将第一个元素剔出去,未定义长度时不限长度。
import collections
d = collections.deque(maxlen =3)
d.append(1)
d.append(2)
d.append(3) #上述等价于d = collections.deque(1,2,3),这样初始化的队列长度不限
print(d)
>>>输出:deque([1, 2, 3], maxlen=3)
d.append(4)
print(d)
>>>输出: deque([2, 3, 4], maxlen=3) #添加元素超过队列长度maxlen时,第一个元素自动出队
d.appendleft(5) # appendleft() 元素左侧添加入队列
print(d)
>>>输出:deque([5, 2, 3], maxlen=3)
d.pop() #出队
print(d)
>>>输出:deque([5, 2], maxlen=3)
d.popleft() # popleft() 左侧出队
print(d)
>>>输出:deque([2], maxlen=3)
三:OrderedDict()
使用dict()构造的字典的keys是无序的,使用OrderdDict可以保持keys被插入时的顺序。
Notes: OrderedDict内部是一个双向链表,每次当一个新的元素插入进来,它会被放到链表的尾部。一个OrderedDict的大小是一个普通dict的两倍,因为它内部维护着另一个链表。在涉及大量数据时需要权衡一下OrderedDict所带来的便利性与内存消耗的影响。
import collections
dictionary = dict([('a',1), ('b',2), ('c',3)]) #定义一个字典并初始化
dictionary['d'] = 4 #向字典中添加一个元素
print('dictionary:=',dictionary)
>>>输出:dictionary:= {'b': 2, 'd': 4, 'a': 1, 'c': 3}
# 使用OrderedDict构建的字典,按key初始化时的插入有序存取
order_dictionary = collections.OrderedDict([('a',1), ('b',2), ('c',3)])
order_dictionary['d']=4 #向字典中添加元素时加入尾部
print(order_dictionary)
>>>输出:OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
四:Counter()
实现计数功能,在构建词典时常用来统计词频(返回结果降序排列),将常与.most_common(most_num)一起使用。
.most_common(most_num) 可以截取出最高频的前most_num个数据
Counter还可以结合一些简单的数学运算
import collections
#'aaabcccccc'
#['a', 'a', 'a', 'b', 'c', 'c', 'c', 'c', 'c', 'c']
#{'a':3, 'b':1, 'c':6} #这三部分代替a=3,b=1,c=6是一样的初始化结果
count1 = collections.Counter(a=3,b=1,c=6) #统计频率,并降序排列
print('count1=',count1)
count2 = collections.Counter('acc')
print('count2=',count2)
print('count1-count2=',count1-count2) #得到的counter可以进行简单的运算
print('most_common=',count1.most_common(2)) #截取前2个高频数据
>>>输出:
count1= Counter({'c': 6, 'a': 3, 'b': 1})
count2= Counter({'c': 2, 'a': 1})
count1-count2= Counter({'c': 4, 'a': 2, 'b': 1})
most_common= [('c', 6), ('a', 3)]