目录

    一.collections模块

    • 1 具名元组 nametuple

    1. 作用:具名元组nametuple,生成可以使用名字来访问元素内容的元组tuple

    tuple可以表示不变集合,例如:一个点的二元坐标

    语法: nametuple('名称',[属性list])
    
    1. nametuple表示二维坐标系

    namedtuple(‘坐标点’,[‘x’,’y’])表示二维坐标系

    namedtuple('坐标点',['x','y'])表示二维坐标系
    
    # 举例:用nametuple表示一个点
    
    from  collections import namedtuple
    point = namedtuple('坐标点',['x','y'])
     # 生成点信息
    p1 = point(1,2)
    print(p1)  # 坐标点(x=1, y=2)
    print(p1.x)  # 1
    print(p1.y)  # 2
    
    1. nametuple表示圆的坐标

      nametuple(‘圆Circle’,[‘x’,’y’,’r’])

    # 举例:用nametuple表示一个圆
    
    from collections import namedtuple
    circle = namedtuple('圆Circle', ['x', 'y', 'r'])
    c1 = circle(1, 2, 4)
    print(c1)  # 圆Circle(x=1, y=2, r=4)
    print(c1.x)  # 1
    print(c1.y)  # 2
    print(c1.r)  # 4
    
    • 2 双端队列 deque

    1. 作用:双端队列deque 两边都能进两边都能出

    队列与堆栈

    队列:先进先出
    堆栈:先进后出
    队列和堆栈都是一边只能进一边只能出

    1. deque对于数据的处理

      .pop() 方法和 .popleft()方法

    # 举例
    
    from collections import deque
    q = deque([1, 2, 3])
    print(q)  # deque([1, 2, 3])
    print(q.pop())  # 弹出最后一位的数据值 3
    print(q.popleft())  # 弹出第一位的数据值 1
    
    1. 模块multiprocessing的队列Queue

      两者功能相似但略有不同,可以规定队列中数据的个数,用put方法放入数据,用get方法取出Queue中的数据

    # 举例
    
    from multiprocessing import Queue
    q = Queue(3)  # 声明队列只能放3个数据
    q.put(111)  # put 往进去放数据
    q.put(222)
    q.put(333)
    print(q)  # q是队列 <multiprocessing.queues.Queue object at 0x104d94ee0>
    print(q.get())  # 111  get 取数据
    
    • 3 有序字典 OrderedDict

      特点:按照插入的key的顺序,进行有序排列

    1. 无序字典dict
    d1 = dict([('a', 1), ('b', 2), ('c', 3)])
    print(d1)  # {'a': 1, 'b': 2, 'c': 3}
    
    1. 有序字典 OrderedDict
    # 举例
    
    from collections import OrderedDict
    
    od1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(od1)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(od1.get('a'))  # 1 获得key 'a'对应的值为 1
    print(od1.values())  # 获得od1的values: odict_values([1, 2, 3])
    
    1. 小练习:将大于60的值保存在字典的k1中,小于60的保存在k2中,{‘k1’: 大于60 , ‘k2’: 小于60}
    # 先构造一个有k1 k2 的字典,再用for循环导入
    l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
    
    1.for 循环
    d1 = {'k1': [], 'k2': []}
    for i in l1:
        if i < 60:
            d1['k1'].append(i)
        else:
            d1['k2'].append(i)
    print(d1)  # {'k1': [11, 22, 33, 44, 55], 'k2': [66, 77, 88, 99]}
    
    2.列表推导式
    
    d1 ={
        'k1':[i for i in l1 if i <60],
        'k2':[i for i in l1 if i >60]
    }
    print(d1)
    
    3.filter函数
    
    d2 = {
        'k1': list(filter(lambda x: x < 60, l1)),
        'k2': list(filter(lambda x: x > 60, l1))
    }
    print(d2)
    
    • 4 统计 Counter

    ​ 作用:跟踪值出现的次数,生成一个无序的容器类型,以字典的键值对形式存储结果,其中元素为key,计数结果为value

    # 举例
    
    res= 'adklfj klasdjfklkldkfjaskdlfjalk'
    from collections import Counter
    print(Counter(res))  # Counter({'k': 7, 'l': 6, 'a': 4, 'd': 4, 'f': 4, 'j': 4, 's': 2, ' ': 1})
    

    二、time时间模块

    ​ 在python中时间的表现形式有三种:

    • 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型
    • 结构化的时间(struct_time): struct_time元组中共有九个元素”年:Y,月:m,日:d,时:H,分:M ,秒:S ,一年中的第几周,一年中的第几天,是否是夏令时”
    • 格式化的时间字符串 (Format String

    结构化时间:主要是给计算机看的
    格式化时间:主要是给人看的

    image-20221019113522466

    1. time.localtime(secs)

    将一个时间戳转换成当前时区的struct_time,secs参数为提供的时候以当前时间为准

    import time
    print(time.localtime())
    # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=18, tm_min=34, tm_sec=17, tm_wday=2, tm_yday=292, tm_isdst=0)
    
    print(time.localtime(1))
    # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)
    
    

    2. time.gmtime(secs)

    gmtime()是将一个时间转成格林尼治时间

    print(time.gmtime())
    # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=10, tm_min=39, tm_sec=33, tm_wday=2, tm_yday=292, tm_isdst=0)
    print(time.gmtime(2222))
    # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=37, tm_sec=2, tm_wday=3, tm_yday=1, tm_isdst=0)
    

    3. time.strftime(format[, t])

    把一个代表时间的元组或者结构化时间转换为格式化时间字符串

    import time
    print(time.strftime('%Y/%m/%d %H:%M:%S'))  # 2022/10/19 18:46:30
    print(time.strftime('%Y/%m/%d %X',time.localtime(9933398)))  # 1970/04/26 07:16:38
    

    4. time.time()

    ​ 返回当前时间的时间戳

    import time
    print(time.time())  # 1666176549.509909
    print(time.strftime('%Y/%m/%d %X',time.localtime(1666176549.509909)))  # 2022/10/19 18:49:09
    

    5. time.sleep(secs)

    让程序原地阻塞指定的秒数

    time.sleep(10)  # 让程序原地阻塞10秒
    

    时间戳、结构化时间、格式化时间互相转换

    image-20221019113630093

    三、datetime时间模块

    datetime:更详细的日期类型(年,月,日[,小时[,分钟[,秒[,微秒[,tzinfo]]]]]])年,月和日参数是必需的。

    1. datetime.now()datetime.datetime.today()

    获取当前日期

    import datetime
    print(datetime.datetime.now())  # 2022-10-19 19:00:49.876487
    print(datetime.datetime.today())  # 2022-10-19 19:00:53.679567
    

    2. datetime.date.today()datetime.time.hour()

    import datetime
    print(datetime.date.today())  # 2022-10-19
    print(datetime.time.hour)  # <attribute 'hour' of 'datetime.time' objects>
    

    datetime中属性的含义:

    datetime 年月日 时分秒
    date 年月日
    time 时分秒

    3.datetime.timedelta()

    date.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。

    # 比如可以用 timedelta去定时发布
    
    # datetime.date 可以精确到天
    import datetime
    ctime = datetime.date.today()
    print(ctime)  # 2022-10-19
    time_del = datetime.timedelta(days=3)
    print(ctime + time_del)  # 2022-10-22
    
    # datetime.date 可以精确到时分秒
    ctime = datetime.datetime.today()
    print(ctime)  # 2022-10-19 19:16:09.391063
    time_del = datetime.timedelta(minutes=20)
    print(ctime + time_del)  # 2022-10-19 19:36:09.391063
    

    4. datetime.date()datetime.datetime()

    datetime.date精确到天,datetime.datetime精确到: 年月日 时分秒

    from datetime import date, datetime
    print(date.today())  # 2022-10-19
    print(datetime.today())  # 2022-10-19 19:20:40.145438
    print(datetime.utcnow())  # 获取格林尼治时间 2022-10-19 11:20:40.145444
    import datetime
    # datetime的格式化时间
    c = datetime.datetime(2017, 5, 23, 12, 20)
    print('指定日期:',c)  # 指定日期: 2017-05-23 12:20:00
    

    四、random随机数模块

    1. random.random()random.randint()

    random.random() 返回 [0.0, 1.0) 范围内的下一个随机浮点数
    random.randint(start,end) 返回一个随机整数

    import random
    
    print(random.random())  # 随机产生0-1之间的小数
    print(random.randint(1, 6))  # 随机产生1-6之间的整数
    -----------------------
    0.16370721324370197
    1
    

    2. random.randrange()

    random.randrange()返回一个随机整数,相较于random.randint() 可以添加步长

    print(random.randrange(1, 100, 2))  # 相较于randint可以添加步长
    -------------------
    75
    

    3. random.choice()random.choices()

    随机抽取一个元素

    print(random.choice(['1等奖', '2等奖', '3等奖', '谢谢惠顾'])) 
    print(random.choices(['1等奖', '2等奖', '3等奖', '谢谢惠顾']))  # 随机抽取一个样本 ['1等奖']
    -------------------
    谢谢惠顾
    ['谢谢惠顾']  # choices 返回会带着数据类型
    

    4. random.sample(population, k)

    在总体序列population中随机抽取k长度的列表
    
    print(random.sample(['jason',['a',1,'duo'], (10,9), {4,5,6}, 2], 2))
    -------------------
    [2, (10, 9)]
    

    5. random.shuffle()

    ​ 随机打乱数据集

    l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'K', 'Q']
    random.shuffle(l1)  # 随机打乱数据集
    print(l1)  
    -------------------
    [6, 'J', 'K', 5, 'Q', 3, 9, 7, 8, 10, 4, 2]
    
    • 用random模块产生随机的验证码
    '''产生4位的验证码: 每一位都可以是大写字母、小写字母、数字'''
    def get_code(n):
        code = ''
        for i in range(n):
            # 1.先产生随机的大写字母 小写字母 数字
            random_upper = chr(random.randint(65, 90))
            random_lower = chr(random.randint(97, 122))
            random_int = str(random.randint(0, 9))
            # 2.随机三选一
            temp = random.choice([random_upper, random_lower, random_int])
            code += temp
        return code
    
    res = get_code(10)
    print(res)
    res = get_code(4)
    print(res)
    

    原文地址:http://www.cnblogs.com/DuoDuosg/p/16807562.html

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性