范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python强大的内置模块collections

  1. 模块说明
  collections 是 Python 的一个内置模块,所谓内置模块的意思是指 Python 内部封装好的模块,无需安装即可直接使用。 collections 包含了一些特殊的容器,针对 Python 内置的容器,例如:list、dict、set、tuple,提供了另一种选择; namedtuple:可以创建包含名称的 tuple; deque:类似于 list 的容器,可以快速的在队列头部和尾部添加、删除元素; OrderedDict:dict的子类,可以记住元素的添加顺序; defaultdict:dict的子类,可以调用提供默认值的函数; Counter:dict的子类,计算可hash的对象;
  2. 实战代码(1). testNamedTuple函数
  Python 提供了很多非常好用的基本类型,比如不可变类型 tuple,我们可以轻松地用它来表示一个二元向量。
  namedtuple 是一个函数,它用来创建一个自定义的 tuple 对象,并且规定了 tuple 元素的个数,并可以用属性而不是索引来引用 tuple 的某个元素。
  如此一来,我们用 namedtuple 可以很方便地定义一种数据类型,它具备 tuple 的不变性,又可以根据属性来引用,使用十分方便。
  本示例中我们使用了一个三维坐标 x,y,z 来定义一个 tuple 对象,对象元素有3个,然后通过坐标值来引用相应的值即可。 from collections import namedtuple from collections import deque from collections import defaultdict from collections import OrderedDict from collections import Counter   def testNamedTuple():     vector=namedtuple("vector",["x","y","z"])     flag=vector(3,4,5)     print(type(flag))     print(isinstance(flag,vector))     print(isinstance(flag,tuple)) #通过这里的判定我们就可以知晓它是元组类型     print(flag.x,flag.y,flag.z)
  (2). testDeque函数
  deque是栈和队列的一种广义实现,deque是 "double-end queue" 的简称;
  deque支持线程安全、有效内存地以近似O(1)的性能在 deque 的两端插入和删除元素,尽管 list 也支持相似的操作,但是它主要在固定长度操作上的优化,从而在 pop(0) 和 insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。
  在数据结构中,我们知道队列和堆栈是两个非常重要的数据类型,一个先进先出,一个后进先出。
  在 python 中,使用 list 存储数据时,按索引访问元素很快,但是插入和删除元素就很慢,因为 list 是线性存储,数据量大的时候,插入和删除效率很低。
  deque是为了高效实现插入和删除操作的双向链表结构,非常适合实现队列和堆栈这样的数据结构。 def testDeque():     list1=[x*x for x in range(101)]     delist=deque(list1) #对列表进行了一次再处理,让list1列表变成了双向链表结构     delist.append(1000)#将x添加到deque的右侧     delist.appendleft(2000)#将x添加到deque的左侧     delist.pop(1000)#移除和返回deque中最右侧的元素,如果没有元素,将会报出IndexError;     delist.popleft()#移除和返回deque中最左侧的元素,如果没有元素,将会报出IndexError;     delist.count(1)#返回deque中元素等于1的个数     delist.remove(10000)#移除第一次出现的value,如果没有找到,报出ValueError;     delist.reverse()#反转deque中的元素,并返回None;     list2=[1,3,4,5]     delist.extend(list2)#将可迭代变量iterable中的元素添加至deque的右侧     delist.extendleft(list2)#将变量iterable中的元素添加至deque的左侧,往左侧添加序列的顺序与可迭代变量iterable中的元素相反     delist.maxlen()#只读的属性,deque的最大长度,如果无解,就返回None     delist.rotate(1)#从右侧反转n步,如果n为负数,则从左侧反转     delist.clear()#将deque中的元素全部删除,最后长度为0;
  (3). testDefaultdict函数
  defaultdict是内置数据类型 dict 的一个子类,基本功能与 dict 一样,只是重写了一个方法__missing__(key)和增加了一个可写的对象变量 default_factory。
  使用 dict 字典类型时,如果引用的 key 不存在,就会抛出 KeyError。如果希望 Key 不存在时,返回一个默认值,就可以用 defaultdict。 def testDefaultdict():     dict1= defaultdict(lambda: "default") #Key不存在时,返回一个默认值,就可以用default,defaultdict的其他行为跟dict是完全一样的     dict1["k1"]="v1"     print(dict1["k2"])      list2= [("yellow",11),("blue",2),("yellow",3),("blue",4),("red",5),("red",10)]     dict1 = defaultdict(list)#使用list作为default_factory,很容易将一个key-value的序列转换为一个关于list的词典     for k,v in list2:         dict1[k].append(v)     print(dict1)
  (4). testOrderedDict函数
  OrderedDict类似于正常的词典,只是它记住了元素插入的顺序,当在有序的词典上迭代时,返回的元素就是它们第一次添加的顺序。这样 dict 就是一个有序的字典。
  使用 dict 时,key 是无序的。在对 dict 做迭代时,我们无法确定 key 的顺序。但是如果想要保持 key 的顺序,可以用 OrderedDict。 def testOrderedDict():     dict1=dict([("aaa", 111), ("ddd",444),("bbb", 222), ("ccc", 333)])     print(dict1)      dict2 = OrderedDict([("ddd",444),("aaa", 111), ("bbb", 222), ("ccc", 333)])#OrderedDict的key会按照插入的顺序排列,不是key本身排序     print(dict2)      dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444}     # dict sorted by key     dict4=OrderedDict(sorted(dict3.items(), key=lambda t: t[0]))     print("dict4",dict4)     # dict sorted by value     dict5=OrderedDict(sorted(dict3.items(), key=lambda t: t[1]))     print("dict5",dict5)     # dict sorted by length of key string     dict6 = OrderedDict(sorted(dict3.items(), key=lambda t: len(t[0])))     print("dict6",dict6)     print(dict6["apple"])
  (5). testCounter函数def testCounter():     """counter可以支持方便、快速的计数"""     str1="abcdefgabcedergeghdjlkabcdefe" #将可迭代的字符串初始化counter     str2=Counter(str1)     print(str2) #从输出的内容来看,Counter实际上也是dict的一个子类     for k,v in str2.items():         print(k,v)      dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444,"apples":2}#将dict初始化counter     dict4=Counter(dict3)     print(dict4)     print(dict4["test"])#Counter对象类似于字典,如果某个项缺失,会返回0,而不是报出KeyError;      dict5=Counter(high=9,age=33,money=-1)#将args初始化counter     print(dict5)     #elements返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它;     list1=list(dict5.elements())     print(list1)      #most_common返回一个列表,包含counter中n个最大数目的元素     #,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列;     str1 = "abcdefgabcedergeghdjlkabcdefe"     list1=Counter(str1).most_common(3)     print(list1)  if __name__ == "__main__":     # testNamedTuple()     # testCounter()     testDefaultdict()     # testDeque()     # testOrderedDict()

南非望远镜探测到50亿光年外强烈微波南非射电望远镜捕捉到宇宙深空一道强烈的微波,距离地球50亿光年。天文学称它为巨脉泽。脉泽,即受激辐射的微波放大,可以理解为宇宙空间微波波段的激光现象。激光全称是受激辐射的光放大,而GitHub近两万Star,无需编码,可一键生成前后端代码,开源项目项目介绍JeecgBoot是一款基于代码生成器的低代码开发平台!前后端分离架构SpringBoot2。x,SpringCloud,AntDesignVue,Mybatisplus,重力储能会成为化石燃料和电池杀手吗?正文字数816预计阅读时长3分钟worldenergy网4月18日报道重力储能是一种相对较新的技术,由于其低碳足迹和简单的工程设计,它可能会为能源存储带来革命性的变化。瑞士苏格兰和B站回应直播部门裁员直播业务情况很好,目前在积极对外招聘Tech星球4月18日消息,针对媒体报道的,B站直播业务部门或整体裁员的消息,B站回应称,直播业务情况很好,毛利连续三年在提升,未来是B站最重要的业务之一,目前在积极对外招聘。据悉小米新机官方预热4月18日见,年度轻薄机?随着两大旗舰芯片发布后,各大手机品牌都发布了自家的旗舰机和高端机,游戏手机影像手机等定向机也基本发布完毕了,而4月份开始不少品牌发布低端机和中端机,后续的4月份和5月份主力也是在低雷总,您的小米商城还能走多远?雷总,我私信您,可能您看不到!但我想说的是咱们小米这么大的公司,居然服务和体验这么差!我们家使用小米的产品不下10部!但都是线下门店或某东和某猫购买!想着疫情吧,能不外出,就不外出iPhone14或将于9月14日发布会正式亮相!渲染图曝光苹果新机iPhone14有了新消息。日前据外媒爆料称,苹果已经敲定了秋季新品发布会的日期,备受瞩目的iPhone14系列新机将定于美国时间9月13日(即北京时间9月14日)正式发布两款5年不卡的4nm旗舰,都是120W快充4700mAh大电池,已开始降价其实对于手机这种产品来说,最重要的配置就是要流畅度足够高,因为只有手机用着不卡顿,那么其它的功能才会得以正常实现,比如玩游戏,如果一直卡的话,那么恨不得砸了这样的手机,再比如去超市就很丝滑,就很4K!开箱蚂蚁电竞屏ANT27VU大家好,我是高达。最近啊,看到很多内容,都是在教咱们男同胞在618大促的时候给妹纸购买怎样的大牌礼物。虽然没毛病,但其实我想说,感情嘛,双向奔赴,逢购物节大促,妹纸们应该也会想要买天机8100加持小米Note11T曝光,Note11泪流满面,开启加速降价作为同样的主力性能机型,红米K50和Note11T系列有天机8100处理器加持,性能调度基本相似,这方面差距不会太大。可能是K50的玻璃后盖导热性能比Note11T的全塑料机身好,为什么三年前的华为手机,比现在的新款还能打?对于喜欢数码产品的人来说,都普遍信奉买新不买旧这句话,尤其是像手机这样高频更新换代的产品,几乎一年就要更新一次处理器与硬件配置,一旦新手机推出后,老款手机就会迎来一轮降价。可是,买
不知道搭建什么类型的小程序?看看这五大类型小程序覆盖全行业有的商家在搭建小程序方面卡了壳,看看你的行业适合搭建什么类型的小程序吧。不同行业需要根据自身特点和核心功能需求,搭建一款适合自身经营的小程序店铺,并利用好相应的营销工具,小程序才有触派智慧党建信息云平台,让党建工作更加容易开展为了响应上级明确指出的网络发展到哪里,党建工作就要覆盖到哪里的重要指导。触派电子在经过长时间的市场调研后,再结合自身的触摸一体机产品,推出了智慧党建信息云平台这项服务。智慧党建信息开发一个商城类的小程序,大概需要多少钱?目前,各行业的企业和商家都在开发小程序,来为自己的生意添砖加瓦。那么开发一个商城类的小程序大概需要多少钱?1,开发小程序的注册认证费用微信小程序开发之前必须要完成和注册认证,申请小如何快速开发微信小程序,这款小程序制作工具超好用如今小程序的整体数量是非常多的,并且小程序在类别方面也很多,而从小程序的市场持有量方面能够了解到,每天都处于增加。所以现在仍是有很多商家想要做小程序,那么商家该如何快速开发一个小程小程序运营才19天,这家公园就靠卖票赚了6。4万,他是怎么做到的一家公园在19天内,借助小程序促成了850个订单,平均每笔订单购买2。8张票,总营业额突破6。4万,他是怎么做出这样优异的成绩呢?案例说明商家在2019年7月20日搭建的小程序,8速来!三大案例教你新开业的餐饮店铺如何为门店强势引流万事开头难这是我们都明白的道理,在商家刚开店的时候总是要想很多办法为门店引流,获得用户,今天我带来了三个商家的开店史,让你们了解,他们是如何利用小程序为门店引流,获客上千的。案例一盘点小程序电商玩法十五招式,教你做好店铺的高效引流转化得有店提供了丰富多样的工具辅助商家做好小程序运营,在电商经营上,笔者分享一些常见的有效的运营玩法,帮助商家实现高引流高裂变高转化高复购。一新客有礼功能说明发券宝是一款定向发券工具,双11电商该怎么玩?分享五大增长攻略,玩转小程序私域2020年的双十一大战已经临近,各大品牌和商家也是磨刀霍霍去迎战,早在前两年的双11,就有部分商家将战场延伸到微信小程序上,给电商经营带来了新的增长空间和机会。为此,得有店分别从布最全的小程序引流攻略都在这里了,掌握了引流精髓,就能快速吸粉现在,小程序的制作门槛和投入成本越来越低,主要还是因为各种第三方平台的出现。通过得有店就可以免费制作一款功能强大非常完整的小程序商城系统。制作小程序是很简单,小程序上线之后的运营是中小微企业如何利用小程序直播功能成功实现裂变引流?相信大家在日常的生活中也可以看到,网购已经成为日常,很多电商也在直播卖货,购物方式已经不再只是单纯的线下逛街,线上淘宝了。面对随之到来的直播狂潮,中小微企业又该如何利用小程序直播实小程序拼团活动怎么做才有效果?两大经典拼团策划案例分享小程序拼团作为当下主流的社交营销玩法,在各行业应用中也是非常广泛的。策划一场成功的拼团活动,可以实现快速裂变传播,带来更多新客和订单。接下来,我们就介绍一下如何策划一场成功的拼团活