文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

必须知道的collections模块

2023-01-31 08:18

关注

先来看一下collections模块中的方法:

__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList',
            'UserString', 'Counter', 'OrderedDict', 'ChainMap']

本章我们只介绍除UserDict/UserList/UserString以外的方法,至于这三个方法,我们用于继承他们,而实现你想要的结构。
namedtuple:用于创建具有命名字段的tuple子类的工厂函数

#比如我们想构造一个纸牌类
Card=namedtuple('Card',[rank,suit])    #等同于namedtuple('Card',(rank,suit))
c1=Card('A','红桃')
c2=Card('K','黑桃')
print(c1.rank)    #A
print(c1.suit)    #红桃
print(c1.rank)    #B
print(c1.suit)    #黑桃
#改变对象的属性,可以使用 对象._replace(属性=值)方法更改已创建的对象的值
#_replace可以传入一个dict

deque:list-like容器,两端都有快速追加和弹出类,用于创建多个映射的单个视图(线程安全)

#其内部是一个单字母数组
a=deque("str")
a.appendleft("a")    #在头部插入数据
a.append("b")    #在尾部插入数据
a.count("a")    #查看字符出现的次数
a.insert(2,"y")    #根据索引插入值
a.clear()    #清空双端队列

defaultdict:多值字典

dict1=defaultdict(list/dict/set/lambda :"None")
dict1['a'].add(1)    #以set为例
print(dict1)    #defaultdict(<class 'set'>, {'a': {1}})
print(dict1['b'])    #None,这就是lambda的作用

OrderedDict:保持元素被插入的顺序,结构是一个双向链表

#python3下dict默认也是有序的,但是方法有限
od=OrderedDict([("name","jim"),("age",19),("sex","男")])
od.setdefault("high",178)    #添加一组数据,或者使用od["high"]=178
od.move_to_end('name')    #将name组放置末尾

for i in od.items():
    print(i)    
#('name', 'jim')
#('age', 19)
#('sex', '男')
#('high', 178)

Counter:计数器,在底层中为一个字典

c=Counter()    #可以直接Counter("测shishiyong"),这样就不用循环
for i in "测shishiyong":
    c[i]=c[i]+1
print(c)    
#Counter({'s': 2, 'h': 2, 'i': 2, '测': 1, 'y': 1, 'o': 1, 'n': 1, 'g': 1})
print(c.most_common(3))    #出现次数最多的三个元素
#[('s', 2), ('h', 2), ('i', 2)]
#c['元素']  查看元素的出现次数
#c.update(list/str) 可以增加元素
#Counter可以使用+/-进行运算

ChainMap:合并多个字典

dict1={'name':'jim','age':21}
dict2={'high':175,'gender':'男'}

new_dict=ChainMap(dict1,dict2)
print(new_dict)    #ChainMap({'name': 'jim', 'age': 21}, {'high': 175, 'gender': '男'})
#前dict中存在的键值对将会使后面dict中的键值对不会被重新合并,也可以使用update()方法对
#原字典更新新字典到里面,不过和直接合并的区别是,update会重新创建新字典,原字典更新删除
#数据不会影响新字典
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯