集合库是标准库的一部分,里面有很多数据结构,在列表、字典、元组的基础上做了很多修改和改进。今天就来说说最有用的吧。1.deque实现了一个两端都可以操作的队列,相当于双端队列,可以指定最多可以存放多少个元素,这和Python的基本数据类型列表很相似。fromcollectionsimportdequea=deque(maxlen=3)上面的代码定义了一个大小为3的双端队列,当你插入第4个元素时,队列的第一个元素将被删除。a=deque(maxlen=3)a.append(1)#a=[1]a.append(2)#a=[1,2]a.append(3)#a=[1,2,3]FULLa.append(4)#a=[2,3,4]因为这是一个双端队列,可以在队头插入元素,也可以在首尾删除元素,它们的时间复杂度为O(1):append(x)在队尾插入xappendleft(x)在队头插入xpop()在队尾删除一个元素并返回popleft()在队头删除一个元素队列并返回a=deque(maxlen=10)a.append(1)#a=[1]a.append(2)#a=[1,2]在队列末尾插入2a.appendleft(3)#a=[3,1,2]在队列头插入3x=a.pop()#a=[3,1],x=2删除队列尾元素2y=a.popleft()#a=[1],y=3deletequeueheadelement32、namedtuple这个库提供了命名元组,可以通过指定名字来访问,例如:fromcollectionsimportnamedtuplePoint=namedtuple("Point",['x','y','z'])p=Point(3,4,5)print(p.x,p.y,p.z)#Output:3,4,5namedtuple该函数将第一个参数作为新元组的名称,第二个参数为元组中元素的名称映射,可以是一个字符串列表,它也可以是空格或逗号分隔的字符串。Point=namedtuple("Point","xyz")point=namedtuple("Point","x,y,z")也可以这样初始化,很灵活:p1=Point(3,4,5)p2=Point(x=3,y=4,z=5)p3=Point._make([3,4,5])也可以使用namedtuple设置默认值:PointDef=namedtuple("PointDef","x,y,z",defaults=[0,0,0])p=PointDef(x=1)#p是(1,0,0)如果定义了三个名字,但是提供了两个默认值,那么只有最后一个Both将被赋予默认值:Point=namedtuple("Point","xyz",defaults="[0,0])print(Point._field_defaults)#output:{"y":0,"z":0}3.CounterCounterCounter非常有用,特别是当你需要统计一个列表或可迭代对象中元素的数量时:fromcollectionsimportCounterc=Counter("aaabbccdaaa")print(c)#Output:Counter({'a':6、'b':2,'c':2,'d':1})统计出现频率前几个元素也很方便,比如统计出现频率最高的两个元素:print(c.most_common(2))#output:[('a',6),('b',2)]也可以动态增删字符串,然后计数:c=Counter("abbc")#{"a":1,"b":2,"c":1}c.update("bccd")#{"a":1,"b":3,"c":3,"d":1}c.subtract("bbc")#{"a":1,"b":1,"c":2,"d":1}4.defaultdictdefaultdict类似于dict,但是可以提供dict的值的默认数据类型,如:fromcollectionsimportdefaultdicttoAdd=[("key1",3),("key2",5),("键y3",6),("key2",7)]d=defaultdict(list)forkey,valintoAdd:d[key].append(val)print(d)#{"key1":[3],"key2":[5,7],"key3":[6]}如果使用dict,可能要这样写:d=dict()forkey,valintoAdd:ifkeyind:d[key].append(val)else:d[key]=[val]或类似这样的东西:d=dict()forkey,valintoAdd:d.setdefault(key,[]).append(val)简而言之,defaultdictissimple以及快捷方式的最后,本文分享了4个集合库中几个常用的数据结果,如果对你有帮助,请点赞关注支持
