美文网首页
Python Collections之Counter

Python Collections之Counter

作者: 羋学僧 | 来源:发表于2023-03-06 22:55 被阅读0次

    Counter() 是 collections 库中的一个函数,可以用来统计一个 python 列表、字符串、元组等可迭代对象中每个元素出现的次数,并返回一个字典。

    可以看下常用的 Counter() 例子:

    1、以统计列表中的词频为例

    列表中含有一串整数,要统计每个数出现的次数,可以像下面这样:

    from collections import Counter
     
    nums = [1, 1, 1, 6, 6, 6, 7, 8]
    count = Counter(nums)  # 统计词频
    for k, v in count.items():
        print(k, v)
    print(count)
    
    1 3
    6 3
    7 1
    8 1
    Counter({1: 3, 6: 3, 7: 1, 8: 1})
    
    2、寻找出现次数最多的 k 个数

    出现频率最高的 k 个数字 就可以使用这种方式来解~

    使用 Counter 统计完词频后可以使用 most_common 方法来查找出现频率最高的 k 个数字及其出现次数。

    from collections import Counter
     
    nums = [1, 1, 1, 6, 6, 6, 7, 8]
     
    count = Counter(nums)
     
    ansdict = count.most_common(2)  # 返回出现次数最多的两个数及其出现的次数
    print(ansdict) # 注意输出格式
    ans = []
    for i in range(len(ansdict)):
        ans.append(ansdict[i][0])  # 提取出出现次数最多的两个数
    print(ans)
    
    [(1, 3), (6, 3)]
    [1, 6]
    

    class collections.Counter([iterable-or-mapping])

    Counter 是dict 的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。计数可以是任何整数值,包括0和负数

    from collections import Counter
    cnt = Counter()
    for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
        cnt[word] += 1
    print(cnt)
    # Counter({'blue': 3, 'red': 2, 'green': 1})
    print(cnt.most_common(2))
    # [('blue', 3), ('red', 2)]
    
    iterablemapping (or counter)初始化:
    c = Counter()                           # a new, empty counter
    print(c)
    #Counter()
    c = Counter('gallahad')                 # a new counter from an iterable
    print(c)
    # Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
    c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
    print(c)
    # Counter({'red': 4, 'blue': 2})
    c = Counter(cats=4, dogs=8)             # a new counter from keyword args
    print(c)
    # Counter({'dogs': 8, 'cats': 4})
    
    如果Counter引用的键key没有记录,返回0
    c = Counter(['one', 'two'])
    print(c['three'])
    # 0
    # 如果key不存在,则输出0
    

    Counter 功能:

    • element

    返回一个迭代器,其中每个元素将重复出现计数值次数。 。

    # elements() 方法要求正整数计数。忽略0和负数计数。
    c = Counter(a = 4, b = 3, c = 0, d = -2)
    print(sorted(c.elements()))
    # ['a', 'a', 'a', 'a', 'b', 'b', 'b']
    
    • most_common([n])

    返回一个列表,其中包含 n 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为 None, 将返回计数器中的 所有 元素。

    c = Counter('academic')
    print(c.most_common(2))
    # [('a', 2), ('c', 2)]
    print(c.most_common())
    # N为空或者None,则返回全部值,顺序为出现的顺序
    # [('a', 2), ('c', 2), ('d', 1), ('e', 1), ('m', 1), ('i', 1)]
    
    • subtract([iterable or mapping])

    执行减法操作

    # 对象为mapping
    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, 'b': 0, 'c': -3, 'd': -6})
    
    # 对象为str,为iterable对象
    c = Counter('apple')
    d = Counter('appd')
    c.subtract(d)
    print(c)
    # Counter({'l': 1, 'e': 1, 'a': 0, 'p': 0, 'd': -1})
    
    • +/ -

    单目加和减(一元操作符)意思是从空计数器加或者减去。

    +: 删掉计数为负的值,留下为正的

    -: 删掉计数为正的值,留下为负的

    c = Counter(a = 3, b = 2, c =1, d = -1)
    print(+c)
    # Counter({'a': 3, 'b': 2, 'c': 1})
    print(-c)
    # Counter({'d': 1})
    
    • 数学操作 (+、-、|、&)

    加和减,结合计数器,通过加上或者减去元素的相应计数。交集和并集返回相应计数的最小或最大值。每种操作都可以接受带符号的计数,但是输出会忽略掉结果为零或者小于零的计数。

    c = Counter(a=3, b=1)
    d = Counter(a=1, b=2)
    print(c + d)
    # Counter({'a': 4, 'b': 3})
    print(c - d)
    # Counter({'a': 2}), b值为负,所以不显示
    print(c | d)
    # Counter({'a': 3, 'b': 2})
    print(c & d)
    # Counter({'a': 1, 'b': 1})
    

    其他方法

    c = Counter(a = 3, b = 2, c =1, d = -1)
    print(sum(c.values()))
    # 5
    print(set(c))
    # {'b', 'd', 'a', 'c'}
    print(list(c))
    # ['a', 'b', 'c', 'd']
    print(dict(c))
    # {'a': 3, 'b': 2, 'c': 1, 'd': -1}
    print(c.items())
    # dict_items([('a', 3), ('b', 2), ('c', 1), ('d', -1)])
    

    相关文章

      网友评论

          本文标题:Python Collections之Counter

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