Python之计数器 (Counter)
任务描述本关任务:编写一个对输入字符串的字符进行计数的程序。计数器(Counter)计数器是一个无序容器,用于记录各种值出现的次数。它采用键值对的形式存储,要记录的值作为key,这个值出现的次数作为value,value值可正可负。创建计数器要创建一个计数器实例,可以调用它的无参构造函数:c = collections.Counter()这样就创建了一个空的计数器实例c。...
本关任务:编写一个对输入字符串的字符进行计数的程序。
计数器是一个无序容器,用于记录各种值出现的次数。它采用键值对的形式存储,要记录的值作为key
,这个值出现的次数作为value
,value
值可正可负。
要创建一个计数器实例,可以调用它的无参构造函数:
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
是相同的。
计数器是dict
的子类,因此可以像使用dict
那样访问计数器元素:
print(c['a'])
print(c['b'])
print(c.c)
得到的结果是:2
2
1
不过与dict
不同的是,当访问计数器中不存在的元素的时候,不会产生异常,而是返回0
,比如:
print(c['d']) #c中没有d元素,但不会发生异常
上面的代码能够正常运行,并且结果是:0
要改变计数器中某一元素的值,除了可以使用操作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}
从上面的例子可以发现,当计数器中一个元素的值减少到0
时,它并不会自动从计数器中删除,如果要删除元素,可以使用del
函数:
del(c['d'])
上面这行语句执行后,c
的值从原来的:{'a': 2, 'b': 2, 'c': 1, 'd': 0}
变成了:{'a': 2, 'b': 2, 'c': 1}
即元素d
被删除了。
计数器还提供了一个获取出现次数最多的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)]
注意:如果有多个元素的值相同,那么它们之间的顺序是不可确定的,不要在它们的顺序上作任何假设。
根据提示,在右侧编辑器补充代码完成函数功能,函数需要读取6
行输入,然后进行如下操作:
- 将偶数行的数据加到计数器中
- 将奇数行的数据从计数器中减去
注意:行数是从0
开始的。
最后输出计数器中的所有元素。
我会对你编写的代码进行测试:
测试输入:aabbc
aabbc
aabbc
aabbc
aabbc
aabbc
预期输出:[('a', 0), ('b', 0), ('c', 0)]
测试输入:a
b
a
b
a
b
预期输出:[('a', 3), ('b', -3)]
import collections
def Func():
#在此处填充代码实现功能
c = collections.Counter()
for i in range(1,7):
str = input()
if(i%2!=0):
c.update(str)
else:
c.subtract(str)
print(c.most_common())
更多推荐
所有评论(0)