Python——collections(集合模块)
集合类常用模块
在内置数据类型(dict,list,str,tuple)的基础上,collections模块还提供了几个额外的数据类型。
deque:
双端队列,可以快速的从另一侧追缴和推出对象。
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低,deque是为了搞笑实现插入和删除操作的双向列表,适合用于队列和栈。
1 2 3 4 5 6 7 8 | from collections import deque q = deque([ 'a' , 'b' , 'c' , 'd' ]) q.append( 'x' ) #在最后插入 q.appendleft( 'y' ) #在最前插入 print (q) #deque(['y', 'a', 'b', 'c', 'd', 'x']) 数据输出为deque类型。 data = q.popleft() #删除第一个并返回值 data1 = q.pop() #删除最后一个并返回值 |
namedtuple
可命名元组:
为了方便定义元组后的调取问题,可以使用key,vlaue的方式来进行。同时还具有元组的不可改变性。
后台:1.创建一个类,2. 这个类没有方法 3. 所有属性值不能修改。
1 2 3 4 5 6 | from collections import namedtuple Course = namedtuple( 'course' ,[ 'name' , 'price' , 'teacher' ]) python1 = Course( 'python' , 19999 , 'python1' ) print (python1) |
OrderedDict:
有序字典:使字典有序化。
1 2 3 4 5 6 | import collections data_dict = collections.OrderedDict([( '1' , 1 ),( '2' , 2 ),( '3' , 3 )]) print (data_dict) #OrderedDict([('1', 1), ('2', 2), ('3', 3)]) for k,y in data_dict.items(): print (k,y) # 1 1 2 2 3 3 |
DefaultDict:
默认值字典:
正常情况下,字典内如果没有取的值,将会报KeyError的错误,在使用默认值字典后,如果不存在将会返回预设定的默认值。
1 2 3 4 5 | from collections import defaultdict dd = defaultdict( lambda : 'N/A' ) dd[ 'key1' ] = 'abc' print (dd[ 'key1' ]) # key1存在 print (dd[ 'key2' ]) # key2不存在,返回默认值N/A |
实例:
将大于66的和小于66的分别放入到两个value中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # ---------------正常写法------------------- lis = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 , 98 , 76 ] result = {} for i in lis: if i > 66 : if 'key1' not in result: result[ 'key1' ] = [] result[ 'key1' ].append(i) else : if 'key2' not in result: result[ 'key2' ] = [] result[ 'key2' ].append(i) print (result) # ------------使用defaultdict写法------------ from collections import defaultdict lis = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 , 98 , 76 ] my_dict = defaultdict( list ) # 会生成一个空的list和一个空字典。defaultdict(<class 'list'>, {}) print (my_dict) #defaultdict(<class 'list'>, {}) for i in lis: if i> 66 : my_dict[ 'key1' ].append(i) else : my_dict[ 'key2' ].append(i) print (my_dict) #如果key1在字典里那么就添加,如果不在那么就新增一个key。 |
Counter
目的是用来跟踪值出现的次数,它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的interger(包括0和负数)
1 2 3 4 | from collections import Counter c = Counter( '123123123123' ) print (c) #Counter({'1': 4, '2': 4, '3': 4}) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· 在外漂泊的这几年总结和感悟,展望未来
· 博客园 & 1Panel 联合终身会员上线
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在 ASP.NET Core WebAPI如何实现版本控制?