python的collection,Python入门之collections模块
Python内置了很多模块,大部分属于具体开发,而collections是基础数据类型的补充模块,所以在日常代码中使用频率很高,值得做笔记。本文只介绍主要关键词,详细功能是浏览官方文档。地址如下。
英语站:https://docs.python.org/3.5/library/collections.html
中文站:3358 python . us yiyi.cn/translate/python _ 352/library/collections . html #模块-收藏
1.计数器
Counter是dictionary的子类。它的主要功能是统计lmdsmt的可能对象的个数,跟踪元素的出现次数,并按照从高到低的顺序在字典中排列。对象是键,出现的次数是值。示例代码如下:
__作者__=立信
如果使用导入集合#,则必须首先导入集合模块。
# counter字典的字符出现次数扩展统计需要在类中生成对象。
C1=collections . counter(arhshdgrgrgas))来生成跟踪字符串的计数器对象。
是打印(C1)
以print的前两个元素(C1.most_common)为例
输出结果如下
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/
计数器((r ) g: 3,g ) g: 3,h653:2,a653:2,s65:d65:)
[(r)、3)、g)、3 ) ]
如上所述,Counter的主要功能是跟踪内容,统计相同元素的出现次数,并生成和返回一个字典。使用时,首先调用模块,通过类生成对象,然后使用。此外,还有许多方法来处理计数器中的结果。例如,most_common是字典检索的前两个元素。由于计数器是按照从高到低的顺序排列的,所以也可以说这是出现频率最高的前两个元素。
2.订单目录
Orderdictionary是一个常规的字典,python中常用的字典类是没有顺序的。在某些情况下,可能有必要跟踪字典键值的附加优先级。虽然编写自己的实现过程需要数组和字典的配合,但是orderdictionary将这个过程打包成了一个类,这样就可以直接使用了。代码如下。
必须导入集合模块。这是因为上面的代码已经被导入。
order dict=collections . ordered dict(
orderdict[k1]=test1
orderdict[k2]=test2
orderdict[k3]=test3
打印(订单诊断)。
common_dict={}
common_dict[k1]=test1
common_dict[k2]=test2
common_dict[k3]=test3
打印(common _ dict)是
输出结果
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/
有序字典结果:ordereddict(()、)k1、)、test1、)、k2、)、test2、)、k3、)、test3)
无序字典结果{k3: test3 , k1: test1 , k2: test2}
如上所述,从有序字典和无序字典的对比可以看出,orderdictionary的输出结果是按照我们的元素添加记录进行排列的,而普通字典没有这样的功能。这也是必须注意的一点。订单目录记录是添加订单,而不是内部自排序。
3.缺省目录
为了简化代码类,在处理一些数据时需要通过字典访问默认字典。如果不知道字典的类型,在调用相关的类方法之前一定要做出判断。正因如此,python将其打包为使用字典时可以指定的字典值类型,这样就可以直接使用value内部元素的类方法。代码如下所示
#defaultdict默认字典使字典的值具有默认类型,并允许直接使用类方法。
我的_dic
t=collections . default dict(list)#指定字典值类型为list。
My_dict[k1]=[5,6,89,30]#保存一个键值对
My_dict[k1]。append(68)#直接调用list类方法
print(My_dict[k1])
输出结果
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/day 3/collection series/Lixin _ collections . py
[5, 6, 89, 30, 68]
对于默认字典,有相当多的使用场景,尤其是字典初始值为空的时候。如果是普通字典,我们往往需要在添加第一个值时特别注明格式。如果是默认字典,可以避免这个代码流。
4 .命名元组
可命名元组。这里可以提一下斯威夫特。siwft更新到3.0后,语法标准是强制命名元组。但是在python中,截至目前,我用的是3.5未知。您仍然可以自由地定义元组,而无需命名它们。但是有时候,我们需要用一个命名的元组来让别人知道这个数据结构的含义,比如一个直角坐标系。最好注明第一个元素是X,第二个元素是y,这种情况下python不需要自己写新的类,因为集合中有一个命名的tuple,代码如下
#namedtuple可命名元组必须首先创建类,然后基于类创建对象,然后按如下方式使用对象
coordinate e=collections . named tuple( coordinate ,[x , y]) #第一个参数是类名,第二个参数是要设置的参数名。
点=坐标e (3,5) #点=坐标e (x=3,y=5) #生成对象的方法
Print(point.x)#可命名元组不仅方便解释数据结构的含义,而且方便调用,可以根据名称直接调用。
打印(点y)
Base_tuple=(1, lixin)#原元组只能用下标访问
打印(base_tuple[1])
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/day 3/collection series/Lixin _ collections . py
三
五
立新
5 .德克
双向队列,为队列提供双向支持,默认情况下是线程安全的。所以队列元素支持双向添加,双向是可取的。示例代码如下:
#双向队列是更好的,也是线程安全的。
My_deque=collections.deque() #实例化一个双向队列对象
My_deque.append(12)#从右边添加一个元素
My_deque.appendleft(90)#从左边添加一个元素
My_deque.appendleft(80)#添加一个原
Number=My_deque.pop()# pop默认从右侧获取,即12.pop不仅获取值,还会删除原始队列中的元素。
打印(“是:”右边的第一个值,数字)
My_deque.popleft()#获取左边的第一个值,同时会移除此时队列中剩余的相当于90的元素。
Print(My_deque)#打印队列
输出结果
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/day 3/collection series/Lixin _ collections . py
右边的第一个值是:12
德克([90])
6 .连锁地图
字面翻译,就是链图。在我个人使用中,更多的是用于多个字典更新周期的迭代管理。当然,官方文件做的还不止这些。代码示例如下:
#chainmaps链图
dict1={a:1, b:2}
Dict2={c:3, d:4}#生成两个字典对象
chain=collections . chain map(dict 1,dict2) # chain对象,以两个字典为参数
Print (old chain object:,chain)#输出链对象,输出结果是一个元组
Print(maps方法调用:,chain.maps)#通过maps方法输出chain,结果是一个数组
Print(maps下标值,(chain.maps)[1])#这样我们就可以通过下标调用
Print(所有对象的键值,list(chain . keys())# chain的作用,串联字典对象,统一执行命令,比如获取键值。
Print (value values of all objects:,list (chain.values ()) #获取值。python3.x要求list接受地图扩展对象。
Chain=chain.new _ child ({e: 5, f: 6}) #添加新词典
Print (new chain object:,chain)#再次打印值,输出结果如下
输出结果
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/day 3/collection series/Lixin _ collections . py
旧链对象:链映射({a: 1, b: 2},{c: 3, d: 4})
Maps方法调用:[{a: 1, b: 2},{c: 3, d: 4}]
映射下标值{c: 3, d: 4}
所有对象的键值[a , c , b , d]
所有对象的值:[1,3,2,4]
新的chain对象:chainmap ({f: 6, e: 5}、{a: 1, b: 2}、{c: 3, d: 4})
7 .用户字典,用户列表,用户字符串
这三个类都属于集合模块,它们的功能有一定的共性。它们都复制原始的dict、list和string数据,生成新的数据进行额外的处理。在实际使用中,我暂时没有遇到,功能完全可以用普通的新物件代替。以userdict为例,示例代码如下:
D={a: 2, b: 3}#实例一个字典
Ud=collections.userdict (d) #用户词典
Print(d=%s,ud=%s %(d,ud))#打印两个对象
Del ud[a]#删除ud词典中的一个元素
Print(d=%s,ud=%s %(d,ud))#再次输出它
输出结果
d={a: 2, b: 3},ud={a: 2, b: 3}
d={a: 2, b: 3},ud={b: 3}
#如上所述,用户本身是有数据属性的,官方文件上说的是存储真实数据。我试图删除data中的数据,以为可以控制原来的dictionary对象。
但是不能!所以,我也不知道它存在的意义是什么。明白了。我来补充一下。
9。队列补充:队列本身不属于collections模块,只是和双向队列相比较。
除了双向排队,自然还有单排。但是单向队列属于队列模块。在python版本中,这个模块是Queue。在python中,单队列分为队列和栈两种形式。队列以FIFO为特征。如果队列中没有元素,程序将被阻塞,直到队列中有元素。堆栈属于后进先出法。这两个类的取值方法相同,因此将示例代码放在一起进行比较,如下所示:
__作者__=立信
导入# queue不包括在集合模块中,需要单独导入。
#单向队列使消费者一直等到队列中有元素可以作为优先级队列。
一=队列。Queue()#生成队列FIFO
输入一个数字
一. put(80)
Print(队列的输出结果:,one.get())# got 20
Two=queue.lifoque () #生成堆栈LIFO
二. put(20)
二. put(80)
print( stack的输出结果:,two.get())# got 80
输出结果
/library/frameworks/python . framework/versions/3.5/bin/python 3.5/users/Peng long/documents/python/S11/day 3/collection series/Lixin _ collections . py
队列输出结果:20
堆栈输出结果:80
如上所述,python的集合大多是一些常用类的扩展。有许多函数允许我们在不添加额外代码的情况下实现一些自定义函数。都是加成技能,但是因为使用频率的原因我不敢说是透明的,所以如果你想得心应手的话,建议你仔细阅读官方文档。文章仅供参考。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。