首页 > 代码库 > Python 学习日记第五篇 -- collections系列
Python 学习日记第五篇 -- collections系列
一、计数器(counter)
计数器(counter)以字典的形式返回序列中各个字符出现的次数,值为key,次数为value
#!/usr/bin/env python #-*- coding:utf-8 -*- #导入collections模块 import collections counter_test = collections.Counter("asfafjhadgkhjkgfjhgfjhaghdg") print(counter_test) #返回值 C:\Python27\python27.exe D:/cto3/day6/coun_1.py Counter({‘g‘: 5, ‘h‘: 5, ‘a‘: 4, ‘f‘: 4, ‘j‘: 4, ‘d‘: 2, ‘k‘: 2, ‘s‘: 1})
1、计数器的方法(字典方法略)
counter是dict的子类,所有它拥有字典的所有方法,还有一些自己的方法
#取前3位的返回值 ret1 = counter_test.most_common(3) print(ret1) ########## result:[(‘g‘, 5), (‘h‘, 5), (‘a‘, 4)] #循环取计数器中的值 for k,v in counter_test.items(): print(k,v) ########## result: (‘a‘, 4) (‘d‘, 2) (‘g‘, 5) (‘f‘, 4) (‘h‘, 5) (‘k‘, 2) (‘j‘, 4) (‘s‘, 1) #update方法,subtract方法,更新与移除 obj = collections.Counter([11,22,33,22,]) print(obj) obj.update([11,22,44]) print(obj) obj.subtract([11,22,44]) print(obj) ########## result: Counter({22: 2, 33: 1, 11: 1}) Counter({22: 3, 11: 2, 33: 1, 44: 1}) Counter({22: 2, 33: 1, 11: 1, 44: 0})
二、有序字典(orderedDict)
有序字典(orderedDict)是字典的子类,在字典的基础上记录了元素添加的顺序
#导入collections模块 import collections dic = collections.OrderedDict() dic[‘k1‘] = ‘v1‘ dic[‘k2‘] = ‘v2‘ dic[‘k3‘] = ‘v3‘ print(dic) ########## result: OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)])
1、有序字典的方法(字典的方法略)
#python3中新加入的方法,移动字典中的顺序 dic.move_to_end(‘k1‘) print(dic) ########## result: OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k1‘, ‘v1‘)]) #按照顺序,后进先出弹出元素(有返回值) dic.popitem() print(dic) ########## result: OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘)]) #指定弹出的元素(有返回值) dic.pop(‘k2‘) print(dic) ########## result: OrderedDict([(‘k1‘, ‘v1‘), (‘k3‘, ‘v3‘)]) #更新,update方法 dic.update({‘k1‘:‘new1‘,‘k4‘:‘v4‘}) print(dic) ########## result: OrderedDict([(‘k1‘, ‘new1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k4‘, ‘v4‘)])
三、默认字典(defaultdict)
默认字典与字典的区别是可设置其元素的类型
#导入collections模块 import collections my_dict = collections.defaultdict(list) my_dict[‘k1‘].append(‘v1‘) print(my_dict) ########## result: defaultdict(<class ‘list‘>, {‘k1‘: [‘v1‘]})
示例:
# 练习:元素分类 # 有如下值集合 [11,22,33,44,55,66,77,88,99,90...], # 将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 # 即: {‘k1‘: 大于66 , ‘k2‘: 小于66} 1、不用默认指点的写法要判断字典中是否已有{‘k1‘:[]} all_list = [11,22,33,44,55,66,77,88,99,90,] dic = {} for i in all_list: if i > 66: if "k1" in dic.keys(): dic[‘k1‘].append(i) else: dic[‘k1‘] = [i,] else: if "k2" in dic.keys(): dic[‘k2‘].append(i) else: dic[‘k2‘] = [i,] print(dic) 2、默认字典 all_list = [11,22,33,44,55,66,77,88,99,90,] dic = collections.defaultdict(list) for i in all_list: if i > 66: dic[‘k1‘].append(i) else: dic[‘k2‘].append(i) print(dic) ########## result: defaultdict(<class ‘list‘>, {‘k2‘: [11, 22, 33, 44, 55, 66], ‘k1‘: [77, 88, 99, 90]})
四、可命名元祖(namedtuple)
namedtuple与元组的区别是namedtuple创建了一个包含tuple和自己特定方法的类
#导入collections模块 import collections # 创建了一个可命名元组的类 MytupleClass = collections.namedtuple(‘MytupleClass‘,[‘x‘,‘y‘,‘z‘]) # 创建对象,obj对象的x=11,y=22,z=33 obj = MytupleClass(11,22,33) print(obj.x) print(obj.y) print(obj.z) ########## result: 11 22 33
五、队列
1、双向队列
#导入collections模块 import collections d = collections.deque(‘ghi‘) 常用方法: #右加入 >>> d.append(‘j‘) #左加入 >>> d.appendleft(‘f‘) >>> d deque([‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘]) #右移除(有返回值) >>> d.pop() ‘j‘ #左移除(有返回值) >>> d.popleft() ‘f‘ >>> d deque([‘g‘, ‘h‘, ‘i‘]) #队列可转换为列表 >>> list(d) [‘g‘, ‘h‘, ‘i‘] #右扩展 >>> d.extend(‘jkl‘) >>> d deque([‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘]) #左扩展(倒序加入队列) >>> d.extendleft(‘abc‘) >>> d deque([‘c‘, ‘b‘, ‘a‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘]) #右轮换 >>> d.rotate(1) >>> d deque([‘l‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘]) #左轮换 >>> d.rotate(-1) >>> d deque([‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘]) #统计队列中元素出现的次数 >>> d.extend(‘ghijk‘) >>> d deque([‘g‘, ‘h‘, ‘i‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘]) >>> d.count(‘g‘) 2 #清除 >>> d.clear()
2、单向队列(先进先出)
import queue #创建单向队列 q = queue.Queue() #插入第一条数据 q.put(‘123‘) #插入第二条数据 q.put(‘456‘) #查看队列中有几条数据 print(q.qsize()) #顺序取出第一条数据 print(q.get()) ########## result: 2 123
本文出自 “linux启航” 博客,请务必保留此出处http://jiayimeng.blog.51cto.com/10604001/1932093
Python 学习日记第五篇 -- collections系列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。