collections是Python内置的集合模块,提供许多集合类,完成基本的集合操作;
1.namedtuple
作用:named:命名的,tuple:Python基本数据结构,元组,是不可变集合;
即创建一个自定义的tuple对象,并规定其个数;可以用属性完成属性引用(等价于面向对象中对象的属性)
# 1.namedtuple
point = collections.namedtuple('Point',['x','y']) # 定义一个二维的坐标
p = point(11,22) # 类似于构造方法赋值
print(p.x+p.y) # 33
Cicle = collections.namedtuple('Circle',['x','y','z']) # 定义一个三维坐标
Cicle.x = 1
Cicle.y = 2
Cicle.z = 3
print(Cicle.x+Cicle.y+Cicle.z) # 6
2.deque:
python中的list插入和删除数据比较慢,为高效的实现插入和删除,构造双向列表,适用于队列和栈(即此时二者都是双向的,都可以在头尾进行插入和删除)
queue = collections.deque()
queue.append('123') # deque(['123']),123的位置相当于头(如果是栈的话就是栈顶)
queue.appendleft('456') # deque(['456', '123']),等价于从尾插入数据
queue.appendleft('789') # deque(['789', '456', '123'])
queue.pop() # deque(['789', '456']),从头删除数据
queue.popleft() # deque(['456'])
print(queue)
3.defaultdict
在使用dict结构时,当key不存在时,会显示异常;而defaultdict结构中设置默认值,如果不存在,返回默认值;
# 3.defaultdict
dict = {"a" : 65, "b" : 66}
print('a对应的值:{}'.format(dict['a']))
print('c对应的值:{}'.format(dict['c']))
dict1 = collections.defaultdict(lambda:0) # 声明一个值为0的字典
dict1['a'] = 65 # 覆盖一个位置,存储为'a'
print('a对应的值:{}'.format(dict1['a'])) # a对应的值:65
print('c对应的值:{}'.format(dict1['c'])) # c对应的值:0
结果分别为:
4.OrderedDict
使用dict时,key是无序的,orderedDict提供排序的dict(可以自定义排序的规则函数);
dict = collections.OrderedDict()
dict = {'a':2,'b':4,'c':3}
dict = collections.OrderedDict(sorted(dict.items(),key=lambda x:x[1],reverse=True)) # 根据字典中的值倒序排列
for k,v in dict.items():
print(k,v)
'''
b 4
c 3
a 2
'''
5.Counter
统计字符出现的次数
# 5.Counter
word_list = ['programming','program','english','program']
count = collections.Counter(word_list) # 统计每个单词出现的次数
print(count)
count1 = collections.Counter()
word = 'programming'
for i in word:
count1[i] = count1[i]+1
print(count1)
'''
Counter({'program': 2, 'programming': 1, 'english': 1})
Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})
'''