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

#coding:utf8
__author__ = 'libingxian'
__date = "20170416"

import random
import 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.656000137329
countFunc2 耗时: 0.0349998474121

方法2比方法1执行效率大大提升了 ~O(∩_∩)O~
"""




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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lbxoqy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值