• Python-Collections模块之Counter


    Counter : dict的子类,用于计算可hash的对象

    一、Counter : 可以支持方便、快速的计数

    from collections import Counter
    cnt = Counter()
    wordList = ["a","b","c","c","a","a"]
    for word in wordList:
        cnt[word] +=1
    print(cnt)
    #执行结果: Counter({'a': 3, 'c': 2, 'b': 1})
    
    c = Counter()
    c = Counter('geadsafdsa')#从可迭代的字符串初始化counter
    print(c)    #Counter({'a': 3, 'd': 2, 's': 2, 'g': 1, 'e': 1, 'f': 1})
    c = Counter({'red':4,'blue':2})#从映射初始化counter
    print(c)
    c = Counter(cats = 8,dogs = 4)#从args初始化counter
    print(c)
    c = Counter(['eggs', 'ham'])
    print(c['apples'])      #如某个项缺失,会返回0,不会报错
    #执行结果 : 0
    print(c)
    #执行结果: Counter({'eggs': 1, 'ham': 1})
    c['eggs'] = 0
    print(c)
    #执行结果: Counter({'ham': 1, 'eggs': 0})

    二、Counter对象支持以下三个字典不支持的方法,elements(),most_common(),subtract(),update();

    1、Counter.elements(): 返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它

    c = Counter(a=2, b=4, c=0, d=-2, e=1)
    print(list(c.elements()))
    #执行结果:['a', 'a', 'b', 'b', 'b', 'b', 'e']

    2、Counter.most_common() :返回一个列表,包含counter中n个最大数目的元素,如前三个。。。如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列

    c = Counter('agagagarewqrwq').most_common(3)
    print(c)
    #执行结果: [('a', 4), ('g', 3), ('r', 2)]
    c = Counter('agagagarewqrwq').most_common()
    print(c)
    #执行结果: [('a', 4), ('g', 3), ('r', 2), ('w', 2), ('q', 2), ('e', 1)]
    c = Counter('agagagarewqrwq').most_common(None)
    print(c)
    #执行结果: [('a', 4), ('g', 3), ('r', 2), ('w', 2), ('q', 2), ('e', 1)]

    3、Counter.subtract(): 从一个可迭代对象中或者另一个映射(或counter)中,元素相减,类似于dict.update(),但是substracts数目相减而不是替换它们,输入输出都有可能为0或者为负

    c = Counter(a=4, b=2, c=0, d=-2)
    d = Counter(a=1, b=2, c=-3, d=4)
    c.subtract(d)
    print(c)
    #执行结果:Counter({'a': 3, 'c': 3, 'b': 0, 'd': -6})

    4、Counter.update(): 两个可迭代对象元素相加,可迭代对象是一个元素序列,而非(key,value)对构成的序列

    c = Counter(a=4, b=2,c=0, d=-2)
    d = Counter(a=1, b=2, c=-3, d=4)
    c.update(d)

    print(c)
    #执行结果: Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
     

    5、Counter对象常见操作

    #1、统计所有的数目
    c = Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
    print(sum(c.values()))      #统计所有的数目
    
    #2、列出所有的去重后的元素
    c = Counter('bafdsagdsafdsa')
    print(c)    #Counter({'a': 4, 'd': 3, 's': 3, 'f': 2, 'b': 1, 'g': 1})
    a = list(c)
    print(a)
    #执行结果: ['b', 'a', 'f', 'd', 's', 'g']
    
    #转换为set,dict,list
    c = Counter('bafdsagdsafdsa')
    dict = dict(c)
    print(dict)      #{'b': 1, 'a': 4, 'f': 2, 'd': 3, 's': 3, 'g': 1}
    
    s = set(c)
    print(s)    #{'g', 'a', 'f', 'd', 's', 'b'}
    
    list = list(c.items())
    print(list)
    #执行结果:[('b', 1), ('a', 4), ('f', 2), ('d', 3), ('s', 3), ('g', 1)]
    
    #删除数目为0和为负的元素
    c = Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
    c += Counter()
    print(c)
    #执行结果: Counter({'a': 5, 'b': 4, 'd': 2})
    
    #清空counter
    b = Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
    b.clear()
    print(b)
    
    #在Counter对象中进行数学操作
    c = Counter(a=3, b=1, c=-2)
    d = Counter(a=1, b=2, c=4)
    print(c + d)     # 求和, Counter({'a': 4, 'b': 3, 'c': 2})
    print(c - d)     #求差,Counter({'a': 2})    可以减,但不输出为0或者为负的元素个数
    print(c & d)   #求交集    Counter({'a': 1, 'b': 1})
    print(c | d)   #求并集  Counter({'c': 4, 'a': 3, 'b': 2})


    三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
  • 相关阅读:
    HTML
    短信发送平台-阿里大于
    java基础练习题
    2019年让程序员崩溃的 60 个瞬间,笑死我了
    JDBC连接时出现的问题总结
    Java 学习笔记 IO流与File操作
    Java 学习笔记 两大集合框架Map和Collection
    我的github博客地址
    重新认识mapreduce
    java打字游戏
  • 原文地址:https://www.cnblogs.com/deeptester-vv/p/14948994.html
Copyright © 2020-2023  润新知