概述
collections是python的标准库,它提供了一些解决特定问题的容器,也就是说有些问题虽然可以用list,tuple,dict解决,但解决起来太麻烦,而这些问题又经常遇到,所以他们就把这些问题的通用方法整理了出来,放到collections库中让人使用。
collections
中一共有9种容器,其中counter、defaultdict、deque、namedtuple、orderdict
比较常用。
方法 | 作用 |
---|---|
namedtuple() | 创建命名元组子类的工厂函数 |
deque | 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop) |
ChainMap | 类似字典(dict)的容器类,将多个映射集合到一个视图里面 |
Counter | 字典的子类,提供了可哈希对象的计数功能 |
OrderedDict | 字典的子类,保存了他们被添加的顺序 |
defaultdict | 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值 |
UserDict | 封装了字典对象,简化了字典子类化 |
UserList | 封装了列表对象,简化了列表子类化 |
UserString | 封装了列表对象,简化了字符串子类化 |
一,先说 counter 计数器
既然是解决特定问题的容器,那它解决什么问题呢?
嗯,它是统计每个值出现的次数,比如字符串“qwewqasdad”,让你统计q出现了几次,我们一般的思路是什么?
迭代,判断有没有相同的,有相同的对应的字典值加1,没有相同的对应的字典值为1。
很麻烦,如果知道了Counter就很容易得出结论了。
1,导入
from collections import Counter
2,看看它支持哪些构造函数
# 空
em = Counter()
# 字符串
s = Counter("111112222wwwwdddd")
# list
ls = [i for i in "qwqwqwqw12132323"]
l = Counter(ls)
# tuple
tp = (i for i in "qwqwqw")
t = Counter(tp)
# dict
dt = {k: randint(1, 4) for k in "asdfghjkl"}
d = Counter(dt)
# 关键字参数
kw = Counter(a=12, b=34)
---------空------------
Counter()
---------字符串---------
Counter({'1': 5, '2': 4, 'w': 4, 'd': 4})
---------list-----------
Counter({'q': 4, 'w': 4, '2': 3, '3': 3, '1': 2})
---------tuple-----------
Counter({'q': 3, 'w': 3})
---------dict-----------
Counter({'s': 4, 'h': 4, 'l': 3, 'f': 2, 'g': 2, 'j': 2, 'k': 2, 'a': 1, 'd': 1})
---------关键字参数-----
Counter({'b': 34, 'a': 12})
看来常用的字符串,列表,元组,字典都支持。
3,常用方法
most_common(n) 找出重复次数最多的前n个
ls = [i for i in "qwqqwqwqw12132323"]
l = Counter(ls)
print(l)
print(l.most_common(2))
结果
Counter({'q': 5, 'w': 4, '2': 3, '3': 3, '1': 2})
[('q', 5), ('w', 4)]
从结果可以很明显的看出 lc 中,q重复了5次,w重复了4次等等,调用most_common()就可以直接将前几个重复的单词找出来。
elements()是将它拆分开。
ls = [i for i in "qwqqwqwqw12132323"]
lc = Counter(ls)
print(list(l.elements()))
结果
['q', 'q', 'q', 'q', 'q', 'w', 'w', 'w', 'w', '1', '1', '2', '2', '2', '3', '3', '3']
可以看出它把lc全部摊开了,q有多少个就显示多少个,w有多个就显示多少个。
要是看lc中某个值重复了多少次,怎么看呢?它为我们提供了和dict一样的方式。
ls = [i for i in "qwqqwqwqw12132323"]
lc = Counter(ls)
print(lc)
print(lc['q'])
print(lc['w'])
print(lc['b'])
结果
Counter({'q': 5, 'w': 4, '2': 3, '3': 3, '1': 2})
5
4
0
如果没有的话就返回 0 ,如了lc[b]
还有一个常用的方法,itmes(),和dict一样的用法,将数值和出现的次数以元组的形式存放在一起,然后以list的形式统一组合起来
ls = [i for i in "qwqqwqwqw12132323"]
l = Counter(ls)
print(l)
print(l.items())
for k,v in l.items():
print(k,v)
结果:
dict_items([('q', 5), ('w', 4), ('1', 2), ('2', 3), ('3', 3)])
q 5
w 4
1 2
2 3
3 3
还有其他方法如 update()增加元素,subtract减少元素等
最常用到的还是most_common()
,面试的时候被问到几次!
下一篇 Python常用库collections之namedtuple
最后
以上就是机灵芒果为你收集整理的Python测试常用库collections之counter计数器的全部内容,希望文章能够帮你解决Python测试常用库collections之counter计数器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复