写点什么

Python——计数器(Counter)

用户头像
在即
关注
发布于: 3 小时前
Python——计数器(Counter)

1.计数器(Counter)

编写一个对输入的字符串,进行计数的程序。

计数器(Counter)

计数器是一个无序容器,用于记录各种值出现的次数。它采用键值对的形式存储,要记录的值作为 key,这个值出现的次数作为 value,value 值可正可负。


2.创建计数器

要创建一个计数器实例,可以调用它的无参构造函数:

c = collections.Counter()

这样就创建了一个空的计数器实例 c。

也可以从 list,tuple,dict,字符串等可迭代对象(iterable)创建:

c = collections.Counter(['a','a','b','b','c']) #从 list 创建

c = collections.Counter(('a','a','b','b','c')) #从 tuple 创建

c = collections.Counter({'a':2,'b':2,'c':1}) #从 dict 创建

c = collections.Counter("aabbc") #从字符串创建

上面四条语句创建出来的计数器 c 都是相同的:

{'a': 2, 'b': 2, 'c': 1}

最后,你也可以直接指定键值对,来创建计数器:

c = collections.Counter(a=2,b=2,c=1)

创建出来的计数器 c,与上面四条语句创建的计数器 c 是相同的。


3.访问元素

计数器是 dict 的子类,因此可以像使用 dict 那样访问计数器元素:

print(c['a'])

print(c['b'])

print(c.c)

得到的结果是:

2

2

1

不过与 dict 不同的是,当访问计数器中不存在的元素的时候,不会产生异常,而是返回 0,比如:

print(c['d']) #c 中没有 d 元素,但不会发生异常

上面的代码能够正常运行,并且结果是:0


4.增加计数与减少计数

要改变计数器中某一元素的值,除了可以使用操作 dict 的方式:c.a =

XXX 外,计数器还提供了两个成员函数 update subtract


update 函数接受一个可迭代对象,然后将这个对象中各种值出现的次数加到计数器中,比如:

c.update("aabbcd") #字符串也是可迭代对象

上面这行语句执行后,c 的值从原来的:

{'a': 2, 'b': 2, 'c': 1}

增加到了:

{'a': 4, 'b': 4, 'c': 2, 'd': 1}

subtract 函数与 update 函数类似,不过它是从计数器中减去可迭代对象中各种值出现的次数,比如:

c.subtract("aabbcd")


上面这行语句执行后,c 的值从原来的:

{'a': 4, 'b': 4, 'c': 2, 'd': 1}


减少到了:

{'a': 2, 'b': 2, 'c': 1, 'd': 0}


5.删除元素


从上面的例子可以发现,当计数器中一个元素的值减少到 0 时,它并不会自动从计数器中删除,如果要删除元素,可以使用 del 函数:


del(c['d'])

上面这行语句执行后,c 的值从原来的:

{'a': 2, 'b': 2, 'c': 1, 'd': 0}

变成了:

{'a': 2, 'b': 2, 'c': 1}

即元素 d 被删除了。


6.TopN 操作

计数器还提供了一个获取出现次数最多的 n 个元素的成员函数 most_common,它返回包含这些元素的 list,比如:

top1 = c.most_common(1) #出现次数最多的元素

print(top1)

top2 = c.most_common(2) #出现次数最多的两个元素

print(top2)

all = c.most_common() #不提供参数则返回所有元素

print(all)


得到的结果是:

[('a', 2)]

[('a', 2), ('b', 2)]

[('a', 2), ('b', 2), ('c', 1)]

注意:如果有多个元素的值相同,那么它们之间的顺序是不可确定的,不要在它们的顺序上作任何假设。


编程要求


  1. 定义函数,需要读取 6 行输入;

  2. 将偶数行的数据加到计数器中;

  3. 将奇数行的数据从计数器中减去。

  4. 注意:行数是从 0 开始的,最后输出计数器中的所有元素。

测试说明

测试输入:

aabbc

aabbc

aabbc

aabbc

aabbc

aabbc

预期输出:

[('a', 0), ('b', 0), ('c', 0)]

测试输入:

a

b

a

b

a

b


预期输出:

[('a', 3), ('b', -3)]


上代码:

//如果注释理解有误,请大佬们多多评论指教!!

发布于: 3 小时前阅读数: 3
用户头像

在即

关注

记录学习进度 2021.02.27 加入

一个入门小白白!

评论

发布
暂无评论
Python——计数器(Counter)