python中collections模块


  collections是Python内建的一个集合模块,提供了许多有用的集合类。

一、Counter()类

  类是一个无序容器,存储元素形式为:key-value,key代表元素,value代表元素的出现频数。接下来看Counter的一些操作;

1、创建Counter:

可以创建一个空的Counter,之后在空的Counter上进行一些操作。

cou0 = Counter()#创建出来一个空的Counter类

也可以创建的时候传进去一个迭代器(数组,字符串,字典等):

string='we are family and we love peace.We have the Greatwall and the yellow river!'
str_dict={'A':2,'B':5,'G':7,'E':90,'M':6,'N':6, 'x':20,'z':30}
cou1 = Counter(string)#以字符串形式创建Counter类
print('cou1 为:------>', cou1)
cou2 = Counter(str_dict)#以字典形式创建Counter类
print('cou2 为:------>', cou2)
cou3 = Counter(A=1, B=2, x=23, y=34, z=45, o=-5, m=0)#以类字典形式创建即使用键值组合直接创建
print('cou3 为:------>', cou3)

运行结果如下:
在这里插入图片描述
在这里插入图片描述

2、获得Counter中的所有元素:
print('cou3中的所有元素:',list(cou3)) #返回重复次数大于等于1的元素
print('cou3中的非重复元素',set(cou3.elements()) #返回重复次数大于等于1的元素

运行结果如下:
在这里插入图片描述
在这里插入图片描述

3、统计counter中的所有元素个数
print('cou3中所有元素计数总数为:',sum(cou3.values()))
4、将counter中的键进行转换
print('将cou3中的键转为列表为:',list(cou3))
print('将cou3中的键转为集合为:',set(cou3))
print('将cou3中的键转为字典为:',dict(cou3))
print('将cou3中的键转为(elem,count)形式为:',cou3.items())

运行结果如下;
在这里插入图片描述

5、列出Counter中最常见的或最少见的几个元素
print('取出cou3中计数值最小的前4个元素:',cou3.most_common()[:-5:-1])
print('取出cou3中计数值最大的前2个元素:',cou3.most_common()[0:2])

运行结果如下:
在这里插入图片描述

6、使某元素的key值减少:
print('cou2 为:------>', cou2)
cou2.subtract('AA')#这样导致‘A’的值为0但是并不是删除了key值
cou2.subtract('MMMMMMMMMM')#这样的话‘M’的值就是负数了
print( 'A 的值为------>', cou2['A'])
print('M 的值为------>', cou2['M'])
print('cou2 为:------>', cou2)

运行结果如下:
在这里插入图片描述

7、删除元素
del cou2['A']
print('cou2 为:------>', cou2)#这里就没有A的key值了

运行结果如下:
在这里插入图片描述

8、添加counter元素
cou1.update('balabalabalabalabala')#增加
print('b 的值为------>', cou1['b'])
print('a 的值为------>', cou1['a'])

运行结果如下:
在这里插入图片描述

9、counter之间的运算
#一般的运算操作也是满足的
print('cou2 和 cou3之和为:',cou2+cou3)
print('cou2 和 cou3并集为:',cou2|cou3)
print('cou2 和 cou3交集为:',cou2 & cou3)
print('cou2 和 cou3之差为:',cou2 - cou3)

二、deque类

  使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

  deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

from collections import deque
q1 = deque(['a', 'b', 'c'])
q1.append('x')
q1.appendleft('y')
print(q1)
q1.popleft()
print(q1)
q1.remove('b')
print(q1)

q2 = deque(maxlen=3)
q2.append('1')
q2.append('2')
q2.append('3')
print(q2)
q2.append('4')
print(q2)

运行结果如下;
在这里插入图片描述
  从上述代码中可以看出,deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
  另外,deque还可以指定最大长度,如果添加的元素超过了最大长度了,那么左侧的元素会被自动移除。

参考资料

  1. 博客:https://blog.csdn.net/qwe1257/article/details/83272340#Counter_30
  2. 廖雪峰的官网:https://www.liaoxuefeng.com/wiki/897692888725344/973805065315456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值