• python模块之collections random


    collections

    在内置数据类型(list, dict, tuple, set)的基础上,collections提供了几个额外的数据类型: Counter, deque, Orderdict, defultdict, namedtuple等

    1. namedtuple: 生成可以通过名字访问的元组,类似之前的结构化时间

    2. deque: 双向队列

    3. Counter: 计数器

    4. OrderDict: 有序字典

    5. defaultdict: 带有默认值的字典

    nametuple

    我们要描述一个长方体,就可以用namedtuple

    1 from collections import namedtuple
    2 
    3 cube = namedtuple("cube", ["length", "width", "height"])
    4 c1 = cube(5, 4, 3)
    5 print(c1)   # cube(length=5, width=4, height=3)
    6 print(c1.length)   # 5
    7 print(c1.height)   # 3

     

    deque

    deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,deque类似于列表,也有append, pop等方法

    from collections import deque
    q = deque(["a", "b", "c"])
    print(q)   # deque(['a', 'b', 'c'])
    # 添加
    q.append("d")   # 默认从右边添加
    print(q)   # deque(['a', 'b', 'c', 'd'])
    q.appendleft("e")
    print(q)   # deque(['e', 'a', 'b', 'c', 'd'])
    
    # 删除
    q.pop()   # 默认从右边删,不能指定元素删
    print(q)  # deque(['e', 'a', 'b', 'c'])
    q.popleft()  # 默认从左边删
    print(q)    # deque(['a', 'b', 'c'])
    
    # q.pop("b")  # TypeError: pop() takes no arguments (1 given)
    
    print(q.count("a"))   # 1
    q.remove("b")   # 指定元素删
    print(q)   # deque(['a', 'c'])

    OrderDict

    使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderDict,不过python3.6版本以后字典已经是有序的了,所以这个已经用处不大了。注意这里的key有序是指key按照创建字典或插入值的顺序来排

    from collections import OrderedDict
    od = OrderedDict()
    od[1] = "a"
    od[2] = "b"
    od[3] = "c"
    print(od)    # OrderedDict([(1, 'a'), (2, 'b'), (3, 'c')])

    defaultdict

    来看一个例子:有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

    原生字典解决办法

    l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    dic = dict()
    for i in l1:
        if i > 66:
            if "k1" not in dic:
                dic["k1"] = []
            dic["k1"].append(i)
        elif i < 66:
            if "k2" not in dic:
                dic["k2"] = []
            dic["k2"].append(i)
    print(dic)    # {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99, 90]}
    View Code

    defaultdict解决办法

    from collections import defaultdict
    l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    dd = defaultdict(k1=[], k2=[])
    # print(dd)    # defaultdict(None, {'k1': [], 'k2': []})
    for i in l1:
        if i > 66:
            dd["k1"].append(i)
        elif i < 66:
            dd["k2"].append(i)
    print(dd)    # defaultdict(None, {'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55]})
    View Code

    Counter

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

    from collections import Counter
    lst = [1, 2, 3, 3, 2, 4, 5, 3, 1, 0, 0]
    print(Counter(lst))   # Counter({3: 3, 1: 2, 2: 2, 0: 2, 4: 1, 5: 1})
    s = "afshkfhsdjhfakjhsdhajkd"
    print(Counter(s))   # Counter({'h': 5, 'a': 3, 'f': 3, 's': 3, 'k': 3, 'd': 3, 'j': 3})

    Random

    所有与随机的东西都在random模块中

    def v_code():
        """
        用于生成随机验证码
        :return: None
        """
        code = ''
        for i in range(4):
            num = random.randint(0, 9)
            alf = chr(random.randint(65, 90))
            add = random.choice([num, alf])
            code = "".join([code, str(add)])
    
        return code
    
    
    print(v_code())  # 0V28
  • 相关阅读:
    网卡驱动引起openstack的mtu问题
    Ironic几种不同的场景下的网络拓扑
    enable multi-tenancy on openstack pike
    galera断电后无法重建集群
    Fabric单节点安装备忘
    OpenStack Ironic 常见问题
    Enable multi-tenancy on ironic
    kolla-ansible快速入门
    kolla管理openstack容器
    d2.js学习笔记(七)——动态SVG坐标空间
  • 原文地址:https://www.cnblogs.com/zzliu/p/10267659.html
Copyright © 2020-2023  润新知