python累计计数_Python:使用Counter进行计数统计

计数统计就是统计某一项出现的次数。实际应用中很多需求需要用到这个模型。比如测试样本中某一指出现的次数、日志分析中某一消息出现的频率等等‘这种类似的需求有很多实现方法。下面就列举几条。

(1)使用dict

看下面代码#coding=utf-8

data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]

count_frq = dict()

for one in data:

if one in count_frq:

count_frq[one] += 1

else:

count_frq[one] = 1

print count_frq

输出结果如下:

{‘a‘: 3, 2: 1, ‘b‘: 1, 4: 2, 5: 2, 7: 1, ‘2‘: 2, ‘z‘: 1, ‘d‘: 1}

这种方法最简单,也是最容易想到的,鄙人这写这篇博文之前用的最多,不过以后应该不会用来,我们应该使代码更加Pythonic

(2)使用set和list

代码如下:#coding=utf-8

data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]

data_set = set(data)

count_list = []

for one in data_set:

count_list.append((one,data.count(one)))

print count_list

输出结果如下:

[(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)]

这里面利用了list的通用方法和集合(set)的特性,集合是一个无序不重复的元素集,而工厂函数set()可以将列表转换为一个无序不重复的元素集合。

以上方法都很简单,但不够Pythonic。下面来介绍collections中的Counter类。

(一)Counter类

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)支持集合操作+、-、&、|,其中&、|操作分别返回两个Counter对象各元素的最大值和最小值。

(1)Counter的初始化

跟平时自定义类的初始化方法差不多,如下:

c = Counter("hello world")#可迭代对象创建

c = Counter(h=1,l=3,o=2)#关键字创建

c = Counter({‘h‘:1,‘l‘:3,‘o‘:2})#字典创建

c = Counter()#空Counter类

(2)Counter类常见方法

elements():返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素。所有元素按照字母序排序,个数小于1的元素不被包含。

update():用于统计对象元素的更新,原有的Counter计数器对象与新增元素的统计计数值相加而不是直接替换。

subtract():该方法用于计数器对象中元素统计值减少,输入输出的统计值书可以为0或者负数的。

most_common([n]):可以查找出前n个出现频率最高的元素以及它们对于的次数,也就是说频率搞的排在最前面。

所以上面的例子用Counter类的话,也很简单,代码如下:#coding=utf-8

from collections import Counter

data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]

c = Counter(data)

print c

输出结果如下:

Counter({‘a‘: 3, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘z‘: 1, ‘d‘: 1})

咱们接着看代码print c.elements()

print list(c.elements())

输出结果如下:

[‘a‘, ‘a‘, ‘a‘, 2, ‘b‘, 4, 4, 5, 5, 7, ‘2‘, ‘2‘, ‘z‘, ‘d‘]c[‘z‘] -= 1

print c

print c.elements()

print list(c.elements())

输出结果如下:

Counter({‘a‘: 3, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})

[‘a‘, ‘a‘, ‘a‘, 2, ‘b‘, 4, 4, 5, 5, 7, ‘2‘, ‘2‘, ‘d‘]

元素’z‘的统计值变为了0,然后进行elements()运算后,‘z‘就被排除掉了。c.update("aaaa")

print c

输出结果:

Counter({‘a‘: 7, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})

update()在原基础上增加了计数值c.subtract("aaaaa")

print c

输出结果如下:

Counter({‘a‘: 2, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})

subtract()在原基础上减少计数值print c.most_common()

输出结果如下:

[(‘a‘, 2), (4, 2), (5, 2), (‘2‘, 2), (2, 1), (‘b‘, 1), (7, 1), (‘d‘, 1), (‘z‘, 0)]

以上代码都是连接在一起的。

(3)算术和集合操作#coding=utf-8

from collections import Counter

data = [‘a‘,‘2‘,‘2‘,‘b‘,‘a‘,‘d‘,‘a‘,]

c = Counter(data)

b = Counter(a=1,b=2)

print c

print b

print b+c  # c[x] + d[x]

print c-b   # subtract(只保留正数计数的元素)

print c&b   # 交集:  min(c[x], d[x])

print c|b    # 并集:  max(c[x], d[x])

输出结果如下:

Counter({‘a‘: 3, ‘2‘: 2, ‘b‘: 1, ‘d‘: 1})

Counter({‘b‘: 2, ‘a‘: 1})

Counter({‘a‘: 4, ‘b‘: 3, ‘2‘: 2, ‘d‘: 1})

Counter({‘a‘: 2, ‘2‘: 2, ‘d‘: 1})

Counter({‘a‘: 1, ‘b‘: 1})

Counter({‘a‘: 3, ‘2‘: 2, ‘b‘: 2, ‘d‘: 1})

(4)其它

Counter类返回值跟字典很类似,所以字典类的方法对Counter对象也适用。如下:#coding=utf-8

from collections import Counter

data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]

c = Counter(data)

print c.keys()

print c.has_key(‘a‘)

print c.get(‘a‘)

print c.items()

print c.values()

print c.viewitems()

print c.viewkeys()

输出如下:

[‘a‘, 2, ‘b‘, 4, 5, 7, ‘2‘, ‘z‘, ‘d‘]

True

3

[(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)]

[3, 1, 1, 2, 2, 1, 2, 1, 1]

dict_items([(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)])

dict_keys([‘a‘, 2, ‘b‘, 4, 5, 7, ‘2‘, ‘z‘, ‘d‘])

这只是其中一部分,其它的方法可以参考字典类的方法。

另外,Counter对象还支持工厂函数操作set()、list()、dict().

有时间再补充介绍collections模块中其它的类

原文:http://11026142.blog.51cto.com/11016142/1851791

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值