zoukankan      html  css  js  c++  java
  • collections, time, queue的应用

    collections  (克来克深思)

    Counter
    from collections import Counter # 引入模块, 计数器 Counter(康特)
    s = 'sadfasdfasdfasdgha'
    c = Counter(s)#给了可迭代就能用
    print(c)
    deque
    from collections import deque   引入模块 
    d = deque()  # 创建双向队列
    d.append("李茶的姑妈") # 默认在右侧添加
    d.append("无双")
    d.append("影")
    d.append("找到你")
    #让悲伤逆流成河, 理查的姑妈, 无双, 影, 找到你
    print(d)
    d.appendleft("让悲伤逆流成河") # 左侧添加   appendleft(额盘的莱福特)
    print(d)
    
    print(d.pop()) # 从右边删除
    print(d.pop()) # 从右边删除
    print(d.popleft()) # 从左边删除  跑破莱福特
    print(d.pop()) # 从右边删除
    print(d)
    

      

    namedtuple   (内幕的他跑)命名元组
    from collections import namedtuple  引入模块
    po = namedtuple("Point", ["x", "y"]) # 定义了简单的类-lambda
    p = po(1, 2) # 命名元组
    print(p)
    

      

    OrderedDict  (奥德DA科特)  字典的key默认是⽆无序的. ⽽而OrderedDict是有序的
    py3.6以上使用的是新算法. 来自于pypy. 节约20-30%内存
    d = {"a":1,"b":2,"c":3}
    print(d)
    from collections import OrderedDict
    od = OrderedDict({"a":1,"b":2,"c":3})
    print(od)
    print(od.get("b"))
    print(od["b"])
    

      

    defaultdict    (的否特DA科特)可以给字典设置默认值. 当key不存在时. 直接获取默认值:
    from collections import defaultdict  
    d = defaultdict(list) # {} list() 必须是callable
    d['刘伟'] = "奥特曼"
    print(d['大阳哥']) # 当key不存在的时候. 返回默认值.其实就是callable()
    print(d['刘伟'])
    
    lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
    dic = {}
    for el in lst:
        if el > 66:
            dic.setdefault("key1", []).append(el)
        else:
            dic.setdefault("key2", []).append(el)
    print(dic)
    
    
    lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
    dd = defaultdict(list)
    for el in lst:
        if el > 66:
            dd['key1'].append(el)
        else:
            dd['key2'].append(el)
    print(dd)
    

      

    ---------------------------------------------------------------------------------------------------------------------------

    栈和队列

    队列: 先进后出.  First In First Out      简称FIFO

    import queue  引入模块
    q = queue.Queue()#创建队列
    q.put('alex')#放入元素
    q.put('wupeiqi')
    
    print(q.get())获取元素
    print(q.get())  如果阻塞了,在等下一个元素  input()
    

      

    栈:  先进后出.  First In Last Out      简称FILO 

    装馒头的桶
    1. 入栈
    2. 出栈
    属性: 1. 列表(容器) 2.大小(size) 3. 栈顶指针(下一个装元素的位置)
    class StackFullError(Exception):
        pass
    class StackEmptyError(Exception):
        pass
    class Stack:
        def __init__(self, size):
            self.index = 0  #  栈顶指针
            self.size = size
            self.lst = []  # 容器
    
        def push(self, el):
            if self.index < self.size:  #  还没有装满
                self.lst.insert(self.index, el)
                self.index += 1
            else:   # 装满了
                raise StackFullError("the stack is full!")
    
        def pop(self):
            if self.index > 0:
                self.index -= 1
                return self.lst[self.index]
            else:
                raise StackEmptyError("the stack is empty!")
        def clear(self):#清空
            self.lst.clear()
            self.index = 0
        def __sizeof__(self):
            return self.index-1
        def max(self):
            return self.size
        def now(self):
            return self.index
    # 使用
    # 1.实例化栈
    s = Stack(5)
    s.push("馒头1")
    s.push("馒头2")
    s.push("馒头3")
    s.push("馒头4")
    
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())
    

      

      

    -----------------------------------------------------------------------------------------------------------

    time(重点(太木))

    当前系统时间 1538970854.5946708 float 时间戳. 给机器用的.数据库有的时候存储的是时间戳

    以 1970-01-01 00:00:00 原点. 每一秒一个数字.

    %y 两位数的年份表示  (00-99)
    %Y 四位数的年份表示  (000-9999)
    %m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
    %A 本地完整星期名称
    %b 本地简化的⽉月份名称
    %B 本地完整的⽉月份名称
    %c 本地相应的⽇日期表示和时间表示
    %j 年年内的⼀一天(001-366%p 本地A.M.或P.M.的等价符
    %U 一年年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年年中的星期数(00-53)星期⼀一为星期的开始
    %x 本地相应的⽇日期表示
    %X 本地相应的时间表示
    %z 当前时区的名称
    %% %号本身
    日期格式化的标准
    s = time.strftime("%Y-%m-%d %H:%M:%S")
    print(s)
    

      

    import time
    18888888888 时间戳 ->结构化时间 -> 格式化时间
    把时间戳 -> 结构化时间
    f = 18888888888
    st = time.localtime(f)  楼口贪慕
    print(st)
    # 把结构化时间 -> 格式化结构时间
    t = time.strftime("%Y/%m/%d %H:%M:%S",st) # f: format 格式化   
    print(t)
    
    # 用户输入了一个时间 2018-09-08 11:22:36   - 存储 时间戳
    # 先把格式化时间 -> 结构化时间
    s = "2018-09-08 11:22:36"
    st = time.strptime(s , "%Y-%m-%d %H:%M:%S") # p:parse 转换
    # 结构化时间 -> 转化成时间戳 1536376956
    t = time.mktime(st) #
    print(t)
    

      

    --------------------------------------------------------------
    os模块
    os.makedirs('dirname1/dirname2') 可⽣生成多层递归⽬目录
    os.removedirs('dirname1') 若⽬目录为空,则删除,并递归到上⼀一级⽬目录,如若也为空,则删
    除,依此类推
    os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname') 删除单级空目录,若目录不不为空则⽆无法删除,报错;相当于shell中
    rmdir dirname
    os.listdir('dirname') 列列出指定目录下的所有文件和子目录,包括隐藏文件,并以列列表方式
    打印
    os.remove() 删除一个⽂文件
    os.rename("oldname","newname") 重命名⽂文件/⽬目录
    os.stat('path/filename') 获取⽂文件/⽬目录信息
    os.system("bash command") 运⾏行行shell命令,直接显示
    os.popen("bash command).read() 运⾏行行shell命令,获取执⾏行行结果
    os.getcwd() 获取当前⼯工作⽬目录,即当前python脚本⼯工作的⽬目录路路径
    os.chdir("dirname") 改变当前脚本⼯工作⽬目录;相当于shell下cd
    # os.path
    os.path.abspath(path) 返回path规范化的绝对路路径
    os.path.split(path) 将path分割成⽬目录和⽂文件名⼆二元组返回
    os.path.dirname(path) 返回path的⽬目录。其实就是os.path.split(path)的第⼀一个元素
    os.path.basename(path) 返回path最后的⽂文件名。如何path以/或结尾,那么就会返回空值。
    即os.path.split(path)的第⼆二个元素
    os.path.exists(path) 如果path存在,返回True;如果path不不存在,返回False
    os.path.isabs(path) 如果path是绝对路路径,返回True
    os.path.isfile(path) 如果path是⼀一个存在的⽂文件,返回True。否则返回False
    os.path.isdir(path) 如果path是⼀一个存在的⽬目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]]) 将多个路路径组合后返回,第⼀一个绝对路路径之前的参数
    将被忽略略
    os.path.getatime(path) 返回path所指向的⽂文件或者⽬目录的最后访问时间
    os.path.getmtime(path) 返回path所指向的⽂文件或者⽬目录的最后修改时间
    os.path.getsize(path) 返回path的⼤大⼩小
    # 特殊属性:
    os.sep 输出操作系统特定的路路径分隔符,win下为"\",Linux下为"/"
    os.linesep 输出当前平台使⽤用的⾏行行终⽌止符,win下为"
    ",Linux下为"
    "
    os.pathsep 输出⽤用于分割⽂文件路路径的字符串串 win下为;,Linux下为:
    os.name 输出字符串串指示当前使⽤用平台。win->'nt'; Linux->'posix'
    os模块

    -----------------------------------------------------------------
    import random
    print(random.random()) #  0-1小数  想办法完成[1,100]之间的随机整数
    print(random.uniform(1, 3)) # 1-3之间的小数
    
    print(random.randint(1, 36)) # [1,36]随机整数
    print(random.randrange(1, 5, 3)) # [1, 5) 步长是3
    
    
    print(random.choice(["马化腾", ["倚天屠龙记", "天龙八部", "射雕"], "张无忌", "周伯通", "刘伟"])) 
    # 随机选一个 print(random.sample(["刘伟", "大阳哥", "大猪蹄子", "胡辣汤"], 3)) print(random.sample(list(range(1,37)), 7)) lst = [1,2,3,4,5,5,6,7,8,9,] random.shuffle(lst) # 洗牌 print(lst)
  • 相关阅读:
    【树形dp】Find Metal Mineral
    【树形dp】Apple Tree
    【状压dp】Islands and Bridges
    【状压dp】Travelling
    【状压dp】Most Powerful
    【线段树】Mayor's posters
    【线段树】I Hate It
    【线段树】Atlantis
    【线段树】校门外的树
    【并查集】银河英雄传说
  • 原文地址:https://www.cnblogs.com/xihuanniya/p/9755615.html
Copyright © 2011-2022 走看看