zoukankan      html  css  js  c++  java
  • python中统计计数的几种方法

    以下实例展示了 count() 方法的使用方法:

    1
    2
    3
    4
    5
    6
    # !/usr/bin/python3
     
    = (123'Google''Runoob''Taobao'123);
     
    print ("123 元素个数 : ", T.count(123))
    print ("Runoob 元素个数 : ", T.count('Runoob'))

    以上实例输出结果如下:

    1
    2
    123 元素个数 :  2
    Runoob 元素个数 :  1

    1) 使用字典dict()

    循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1.

    lists = ['a','a','b',5,6,7,5]
            count_dict = dict()
            for item in lists:
                if item in count_dict:
                    count_dict[item] += 1
                else:
                    count_dict[item] = 1

    2) 使用defaultdict()

    defaultdict(parameter)可以接受一个类型参数,如str,int等,但传递进来的类型参数,不是用来约束值的类型,更不是约束键的类型,而是当键不存在的话,实现一种值的初始化

    1. defaultdict(int):初始化为 0
    2. defaultdict(float):初始化为 0.0
    3. defaultdict(str):初始化为 ”
    from collections import defaultdict
            lists = ['a', 'a', 'b', 5, 6, 7, 5]
            count_dict = defaultdict(int)
            for item in lists:
                count_dict[item] += 1
    • 3)使用集合(set)和列表(list)

    先使用set去重,然后循环的把每一个元素和每一个元素对应的次数lists.count(item)组成一个元组放在列表里面

    lists = ['a', 'a', 'b', 5, 6, 7, 5]
    count_set = set(lists)
    count_list = list()
    for item in count_set:
        count_list.append((item,lists.count(item))
    • 4)使用Counter

    Counter是一个容器对象,主要的作用是用来统计散列对象,可以使用三种方式来初始化

    1. 参数里面参数可迭代对象 Counter("success")
    2. 传入关键字参数Counter((s=3,c=2,e=1,u=1))
    3. 传入字典 Counter({"s":3,"c"=2,"e"=1,"u"=1})

    Counter()对象还有几个可以调用的方法,代码里面分别进行了说明

    from collections import Counter
    lists = ['a', 'a', 'b', 5, 6, 7, 5]
    a = Counter(lists)
    print(a)  # Counter({'a': 2, 5: 2, 'b': 1, 6: 1, 7: 1})
    a.elements() # 获取a中所有的键,返回的是一个对象,我们可以通过list来转化它
    a.most_common(2) # 前两个出现频率最高的元素已经他们的次数,返回的是列表里面嵌套元组
    a['zz']  # 访问不存在的时候,默认返回0
    a.update("aa5bzz") # 更新被统计的对象,即原有的计数值与新增的相加,而不是替换
    a.subtrct("aaa5z") # 实现与原有的计数值相减,结果运行为0和负值

    1.collections模块

    collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以外的一些特殊的容器类型,分别是:

    • OrderedDict类:排序字典,是字典的子类。引入自2.7。
    • namedtuple()函数:命名元组,是一个工厂函数。引入自2.6。
    • Counter类:为hashable对象计数,是字典的子类。引入自2.7。
    • deque:双向队列。引入自2.4。
    • defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键。引入自2.5。

    文档参见:http://docs.python.org/2/library/collections.html

    2.Counter类

    Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

    2.1 创建

    下面的代码说明了Counter类创建的四种方法:

    >>> c = Counter()  # 创建一个空的Counter类
    >>> c = Counter('gallahad')  # 从一个可iterable对象(list、tuple、dict、字符串等)创建
    >>> c = Counter({'a': 4, 'b': 2})  # 从一个字典对象创建
    >>> c = Counter(a=4, b=2)  # 从一组键值对创建

    2.2 计数值的访问与缺失的键

    当所访问的键不存在时,返回0,而不是KeyError;否则返回它的计数。

    复制代码
    >>> c = Counter("abcdefgab")
    >>> c["a"]
    2
    >>> c["c"]
    1
    >>> c["h"]
    0
    复制代码

    2.3 计数器的更新(update和subtract)

    可以使用一个iterable对象或者另一个Counter对象来更新键值。

    计数器的更新包括增加和减少两种。其中,增加使用update()方法:

    复制代码
    >>> c = Counter('which')
    >>> c.update('witch')  # 使用另一个iterable对象更新
    >>> c['h']
    3
    >>> d = Counter('watch')
    >>> c.update(d)  # 使用另一个Counter对象更新
    >>> c['h']
    4
    复制代码

    减少则使用subtract()方法:

    复制代码
    >>> c = Counter('which')
    >>> c.subtract('witch')  # 使用另一个iterable对象更新
    >>> c['h']
    1
    >>> d = Counter('watch')
    >>> c.subtract(d)  # 使用另一个Counter对象更新
    >>> c['a']
    -1
    复制代码

    2.4 键的删除

    当计数值为0时,并不意味着元素被删除,删除元素应当使用del

    复制代码
    >>> c = Counter("abcdcba")
    >>> c
    Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
    >>> c["b"] = 0
    >>> c
    Counter({'a': 2, 'c': 2, 'd': 1, 'b': 0})
    >>> del c["a"]
    >>> c
    Counter({'c': 2, 'b': 2, 'd': 1})
    复制代码

    2.5 elements()

    返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素。元素排列无确定顺序,个数小于1的元素不被包含。

    >>> c = Counter(a=4, b=2, c=0, d=-2)
    >>> list(c.elements())
    ['a', 'a', 'a', 'a', 'b', 'b']

    2.6 most_common([n])

    返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。

    >>> c = Counter('abracadabra')
    >>> c.most_common()
    [('a', 5), ('r', 2), ('b', 2), ('c', 1), ('d', 1)]
    >>> c.most_common(3)
    [('a', 5), ('r', 2), ('b', 2)]

    2.7 fromkeys

    未实现的类方法。

    2.8 浅拷贝copy

    复制代码
    >>> c = Counter("abcdcba")
    >>> c
    Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
    >>> d = c.copy()
    >>> d
    Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
    复制代码

    2.9 算术和集合操作

    +、-、&、|操作也可以用于Counter。其中&和|操作分别返回两个Counter对象各元素的最小值和最大值。需要注意的是,得到的Counter对象将删除小于1的元素。

    复制代码
    >>> c = Counter(a=3, b=1)
    >>> d = Counter(a=1, b=2)
    >>> c + d  # c[x] + d[x]
    Counter({'a': 4, 'b': 3})
    >>> c - d  # subtract(只保留正数计数的元素)
    Counter({'a': 2})
    >>> c & d  # 交集:  min(c[x], d[x])
    Counter({'a': 1, 'b': 1})
    >>> c | d  # 并集:  max(c[x], d[x])
    Counter({'a': 3, 'b': 2})
    复制代码

    3.常用操作

    下面是一些Counter类的常用操作,来源于Python官方文档

    复制代码
    sum(c.values())  # 所有计数的总数
    c.clear()  # 重置Counter对象,注意不是删除
    list(c)  # 将c中的键转为列表
    set(c)  # 将c中的键转为set
    dict(c)  # 将c中的键值对转为字典
    c.items()  # 转为(elem, cnt)格式的列表
    Counter(dict(list_of_pairs))  # 从(elem, cnt)格式的列表转换为Counter类对象
    c.most_common()[:-n:-1]  # 取出计数最少的n个元素
    c += Counter()  # 移除0和负值
     
  • 相关阅读:
    DB2开发系列之三——SQL函数
    DB2开发系列之二——SQL过程
    DB2开发系列之一——基本语法
    优化的“真谛”
    DB2性能调优
    AIX分页(交换)空间的监控
    AIX5L内存监控和调整
    直接删除undo及temp表空间文件后的数据库恢复一例
    【LeetCode】 -- 68.Text Justification
    关于linux下的.a文件与 .so 文件
  • 原文地址:https://www.cnblogs.com/klb561/p/9326711.html
Copyright © 2011-2022 走看看