美文网首页Python 指南
《Python 每日一学》之 Counter

《Python 每日一学》之 Counter

作者: 谢烟客 | 来源:发表于2018-08-14 13:45 被阅读30次

    假如你有这样一个需求,跟踪相同元素出现的次数,你怎样解决这个问题?

    思路一: 利用 dict 中 key 为一的特性,value 为出现的次数,每次在 dict 中校验 key 是否存在,如果存在 value 值加 1 如果不存在则添加 {key:1}

    思路一的代码实现:

    # Python Version: 3.6
    counter = dict()
    
    def count(ele):
        if ele in counter:
            counter[ele] += 1
        else:
            counter[ele] = 1
    
    if __name__ == '__main__':
        count('a')
        count('a')
        count('b')
    
        print(counter)     # result: {'a': 2, 'b': 1}
    

    思路二:利用 Python 标准库 collections.Counter 实现

    # Python Version: 3.6
    import collections
    
    c = collections.Counter('aa')
    c.update('abc')
    
    print(c)    # result: Counter({'a': 3, 'b': 1, 'c': 1})
    

    collections.Counter 简介:

    1. 四种初始化
    import collections
    
    c = collections.Counter('aabbc')
    c1 = collections.Counter(['a','a','b','b','c'])
    c2 = collections.Counter({'a':2, 'b':2, 'c':1})
    c3 = collections.Counter(a=2,b=2,c=1)
    
    1. 递增更新
    import collections
    
    c = collections.Counter('aabbc')
    c.update('ab')
    print(c)    # result: Counter({'a': 3, 'b': 3, 'c': 1})
    
    1. 递减更新
    import collections
    
    c = collections.Counter('aabbc')
    print(c)    # result: Counter({'a': 2, 'b': 2, 'c': 1})
    c.subtract('ab')
    print(c)    # result: Counter({'a': 1, 'b': 1, 'c': 1})
    
    1. 删除统计项
    import collections
    
    c = collections.Counter('aabbc')
    c.pop('a')
    print(c)    # result: Counter({'b': 2, 'c': 1})
    
    1. 查看统计结果
    import collections
    
    c = collections.Counter('aabbc')
    print(c.get('a'))    # result: 2
    print(c['a'])    # result: 2
    

    tips: 虽然有2种方式,我们还是建议使用 counter['item'] 方式取值,因为默认的统计结果都为整数类型,而采取 counter.get('item') 的方式时,如果 item 不存在返回的 None 类型,容易产生 TypeError ,counter['item'] 如果 item 不存在时结果为 0,与存在时类型相同,处理上更为的简单


    • 交流可以加 QQ 群:397234385
    • 或者 QQ 扫码入群:
    qq群.jpg

    相关文章

      网友评论

        本文标题:《Python 每日一学》之 Counter

        本文链接:https://www.haomeiwen.com/subject/ldgdbftx.html