Python 计数器、增加计数与减少计数、删除元素、、TopN操作

计数器(Counter)

计数器是一个无序容器,用于记录各种值出现的次数。它采用键值对的形式存储,要记录的值作为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被删除了。

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)]

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

编程要求

根据提示,在右侧编辑器补充代码完成函数功能,函数需要读取6行输入,然后进行如下操作:

将偶数行的数据加到计数器中
将奇数行的数据从计数器中减去
注意:行数是从0开始的。

最后输出计数器中的所有元素。
代码:

import collections
def Func():
    #创建一个空的计数器c
    c = collections.Counter()
    #for循环6次赋值给i相当于可以从键盘输入6次
    for i in range(6):
        #input从键盘输入6次
        shuru = input()
        #输入的次数%2,偶数行的数据添加到计数器里,
        #奇数行的数据从计数器中减去
        #0是偶数
        if (i%2 == 0):
            c.update(shuru)
        else :
            c.subtract(shuru)
    #most_common返回参数
    shuchu = c.most_common()
    print(shuchu)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值