完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
4个回答
|
|
collections模块
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要用来计数 4.OrderedDict: 有序字典 5.defaultdict: 带有默认值的字典 |
|
|
|
namedtuple(具名元组)
因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,所以在这里引入了 collections.namedtuple 这个工厂函数,来构造一个带字段名的元组。具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象实例比起来也要小一些,因为 Python 不会用 __dict__ 来存放这些实例的属性。 namedtuple 对象的定义如以下格式: collections.namedtuple(typename, field_names, verbose=False, rename=False) 返回一个具名元组子类 typename,其中参数的意义如下: typename:元组名称 field_names: 元组中元素的名称 rename: 如果元素名称中含有 python 的关键字,则必须设置为 rename=True verbose: 默认就好 下面来看看声明一个具名元组及其实例化的方法: 《img /》《img /》 from collections import namedtuple # 两种方法来给 namedtuple 定义方法名 #User = namedtuple(‘User’, [‘name’, ‘age’, ‘id’]) User = namedtuple(‘User’, ‘name age id’) user = User(‘tester’, ‘22’, ‘464643123’) print(user) #输出结果 User(name=‘tester’, age=‘22’, id=‘464643123’) View Code collections.namedtuple(‘User’, ‘name age id’) 创建一个具名元组,需要两个参数,一个是类名,另一个是类的各个字段名。后者可以是有多个字符串组成的可迭代对象,或者是有空格分隔开的字段名组成的字符串(比如本示例)。具名元组可以通过字段名或者位置来获取一个字段的信息。 具名元组的特有属性: 类属性 _fields:包含这个类所有字段名的元组 类方法 _make(iterable):接受一个可迭代对象来生产这个类的实例 实例方法 _asdict():把具名元组以 collections.OrdereDict 的形式返回,可以利用它来把元组里的信息友好的展示出来 《img /》《img /》 from collections import namedtuple # 定义一个namedtuple类型User,并包含name,sex和age属性。 User = namedtuple(‘User’, [‘name’, ‘sex’, ‘age’]) # 创建一个User对象 user = User(name=‘Runoob’, sex=‘male’, age=12) # 获取所有字段名 print( user._fields ) # 也可以通过一个list来创建一个User对象,这里注意需要使用“_make”方法 user = User._make([‘Runoob’, ‘male’, 12]) print( user ) # User(name=‘user1’, sex=‘male’, age=12) # 获取用户的属性 print( user.name ) print( user.sex ) print( user.age ) # 修改对象属性,注意要使用“_replace”方法 user = user._replace(age=22) print( user ) # User(name=‘user1’, sex=‘male’, age=21) # 将User对象转换成字典,注意要使用“_asdict” print( user._asdict() ) # OrderedDict([(‘name’, ‘Runoob’), (‘sex’, ‘male’), (‘age’, 22)]) #以上实例输出结果为: (‘name’, ‘sex’, ‘age’) User(name=‘Runoob’, sex=‘male’, age=12) Runoob male 12 User(name=‘Runoob’, sex=‘male’, age=22) OrderedDict([(‘name’, ‘Runoob’), (‘sex’, ‘male’), (‘age’, 22)]) 具名元祖的特有属性 |
|
|
|
deque(双向列表)
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。 deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈: 1.创建deque序列: from collections import deque d=deque() 2.deque提供了类似list的操作方法: d=deque() d.append(3) d.append(8) d.append(1) 那么此时d=deque([3,8,1]),len(d)=3,d[0]=3,d[-1]=1 3.两端都使用pop: d=deque(‘12345’) 那么d=deque(['1', '2', '3', '4', '5']) d.pop()抛出的是’5’,d.leftpop()抛出的是’1’,可见默认pop()抛出的是最后一个元素。 #4.限制deque的长度 d=deque(maxlen=20) for i in range(30): d.append(str(i)) #此时d的值为d=deque(['10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], maxlen=20),可见当限制长度的deque增加超过限制数的项时,另一边的项会自动删除。 #5.添加list各项到deque中: d=deque([1,2,3,4,5]) d.extend([0]) #那么此时d=deque([1,2,3,4,5,0]) d.extendleft([6,7,8]) #此时d=deque([8, 7, 6, 1, 2, 3, 4, 5, 0]) deque 列表操作 |
|
|
|
OrderedDict(有序字典)
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。 如果要保持Key的顺序,可以用OrderedDict: from collections import OrderedDict d = dict([('a', 1), ('b', 2), ('c', 3)]) print(d) # dict的Key是无序的 #输出 {'a': 1, 'c': 3, 'b': 2} od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(od) # OrderedDict的Key是有序的 #输出 OrderedDict([('a', 1), ('b', 2), ('c', 3)]) OrderedDict |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
“0元购”智元灵犀X1机器人,软硬件全套图纸和代码全公开!资料免费下载!
10481 浏览 2 评论
1450 浏览 0 评论
【实操文档】在智能硬件的大模型语音交互流程中接入RAG知识库
7830 浏览 1 评论
防止AI大模型被黑客病毒入侵控制(原创)聆思大模型AI开发套件评测4
1178 浏览 0 评论
不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)
3488 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 12:55 , Processed in 0.752604 second(s), Total 99, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号