• collections模块


    collections是Python内建的一个集合模块,提供了许多有用的集合类.

    1 defaultdict

    当defaultdict里面套defaultdict时,实际上实现了一个二维坐标的功能.

    import collections
    # 普通的dict当引用的key不存在的时候会报错,而defaultdict不会,它可以给字典的值设置一个类型,
    # 当key不存在时可以自动生成相应类型的value。
    # 如下可以直接设置为list str int dict等,这些内置类型在没有参数调用时返回空类型。
    d = collections.defaultdict(list)
    print(d)
    print(d[2])  # 新建一个key后,值是一个默认的空list
    d[1] = 5
    print(d)
    # defaultdict(<class 'list'>, {})
    # []
    # defaultdict(<class 'list'>, {2: [], 1: 5})
    
    # defaultdict接受的参数必须是可调用的。若直接传递数字0,就会出现TyptError的异常。
    # 如下设置默认值为0,不用lambda会报错,这里用lambda相当于一个没有传入值,只有返回值的函数,
    a = collections.defaultdict(lambda :0)
    print(a[1])
    print(a)
    # 0
    # defaultdict(<function <lambda> at 0x7fac3db7bea0>, {1: 0})
    
    # defaultdict类除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,
    # 到时该函数的返回结果作为默认值,这样使得默认值的取值更加灵活。
    def fun():
        return [1,2,3]
    b = collections.defaultdict(fun)
    # 如下已经新建了一个key
    b[3]
    print(b[1])
    print(b)
    # [1, 2, 3]
    # defaultdict(<function fun at 0x7fac3c0b2730>, {3: [1, 2, 3], 1: [1, 2, 3]})
    
    # 这里规定了字典的默认值是一个字典,相当与字典套字典
    c = collections.defaultdict(lambda :collections.defaultdict(list))
    # 如果赋明确的数据类型,就按赋的弄,如果不赋就是一个空的list[]
    c[0][1] = 555
    c[1][1].append([1,2,3])
    print(c)
    # defaultdict(<function <lambda> at 0x7fab419087b8>, {0: defaultdict(<class 'list'>, {1: 555}),1: defaultdict(<class 'list'>, {1: [[1, 2, 3]]})})
    View Code

    2 deque 双向队列

    若使用Python的list,通过list.pop(0)去除头部会消耗O(n)的时间.而使用双向队列时间复杂度是O(1)

    3 Counter most_common()

    1> 不仅可以统计list中元素的出现次数,也可以对str中的元素进行统计

    # collections包中的Counter用于统计str list 中元素出现次数
    from collections import Counter
    a = [1,1,2,3,4,5,6,6,6]
    b = Counter(a)
    # 输出一个a中每个元素出现次数的类,且按出现次数由高到低排列
    print(b)
    # 输出元素5的出现次数
    print(b[5])
    # 输出出现次数前三的(元素,次数)对,且类型是list
    print(b.most_common(3))
    # Counter({6: 3, 1: 2, 2: 1, 3: 1, 4: 1, 5: 1})
    # 1
    # [(6, 3), (1, 2), (2, 1)]
    
    # 如下直接输出元素按出现次数由高到低的排序,用的most_common()目的是将Counter(a)化为list,便于迭代
    print([item for items, c in Counter(a).most_common() for item in [items] * c])
    # [6, 6, 6, 1, 1, 2, 3, 4, 5]
    View Code

    参考:http://www.aiisen.com/p/1166376.html

  • 相关阅读:
    JDBC05JDBC控制事务4
    JDBC05详解各个类2
    JDBC05JDBC工具类3
    Tomcat&Servlet7_Tomcat2
    MySQL多表&事务04事务2
    JDBC连接池&JDBCTemplate06_Spring JDBC2
    JDBC连接池&JDBCTemplate06_数据库连接池1
    Tomcat&Servlet7_web服务器软件概述1
    MySQL多表&事务04DCL3
    用 JavaScript 的匿名函数理解 C# 的委托
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12011419.html
Copyright © 2020-2023  润新知