Python使用collections的Counter类对字符串、列表、字典的数据元素进行计数

来源:互联网 发布:买期货的算法 编辑:程序博客网 时间:2024/05/16 19:41

#coding:utf8__author__ = 'libingxian'__date = "20170416"import randomimport time"""最近碰到一个需求,对数据出现的次数进行统计"""# 原始方法1:一开始使用比较笨的方法,把原始数据存入列表,然后循环遍历,效率较低,耗时较长def countFunc1(list1):    se = set(list1) # 去重,找出种子元素    #print se    dict1 = {}    t1 = time.time()    for i in se:        count = 0 # 为每个数据创建一个计数器        for j in list1: # 遍历原始数据            if i == j:                count += 1        dict1[i] = count    t2 = time.time()    print "countFunc1 耗时:",t2 - t1    # print dict1    return dict1# 方法2:使用python内置的集合模块,它提供了许多有用的集合类,其中有个Counter类,它默认对传入的数据元素进行计数,执行效率高def countFunc2(list1):    import collections    t1 = time.time()    listTmp = collections.Counter(list1)    t2 = time.time()    print "countFunc2 耗时:",t2 - t1    # print listTmp    return listTmp# 制造测试数据list1 = []for i in range(100000):    list1.append(random.randint(0,200))countFunc1(list1)countFunc2(list1)"""运行结果:countFunc1 耗时: 0.656000137329countFunc2 耗时: 0.0349998474121方法2比方法1执行效率大大提升了 ~O(∩_∩)O~"""

附上collections中Counter类初始化的说明:

0 0