博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习之路---day21--模块和栈
阅读量:7077 次
发布时间:2019-06-28

本文共 10274 字,大约阅读时间需要 34 分钟。

模块和栈 一:计数模块collections     基础版本:
s="qwewsfdfjiehrfqweqweqwqewq"        dic={}        for el in s:            dic[el]=dic.setdefault(el,0)+1        print(dic)
升级版本:
import collections        from collections import Counter        s="qwewsfdfjiehrfqweqweqwqewq"        qq=Counter(s)        print("__iter__" in dir(qq))        for item in qq:            print(item,qq[item])
 
# 同时列表也可以用counter    # # 列表也可以用Counter        import collections        lst=["1","2","1","1","4","1"]        q=collections.Counter(lst)        print(q)  #打印: Counter({'1': 4, '2': 1, '4': 1})
二:栈和队列   001:栈     栈的进出原则:先进后出     栈的基本知识点总结:
栈是一种先进后出的序列表,先放进去的元素,只能通过栈指针去取出来,每当放入一个元素的时候当往栈里面添加一个元素时,    栈指针会往上移动一个(index会变成 index+1--〉放元素时),取元素的时候,也是通过栈指针,取指针的下一个元素,此时栈    顶指针是:  index=index-1(取元素时),,,空栈的时候添加元素只能用插入--〉insert()
自定义栈满了之后的异常
class StackFullError(Exception):        pass    class StackEmptyError(Exception):        pass    class Stack:  #定义一个栈类        def __init__(self,size):            self.index=0  #栈顶指针            self.lst=[]            self.size=size        def push(self,item):  #往栈里面添加元素            if self.index==self.size:                #栈已经满了   需要报错                raise StackFullError("the Stack is full")            self.lst.insert(self.index,item)  #空列表需要用insert            self.index+=1
 #从栈中获取数据
  
def pop(self):            if self.index==0:                raise StackEmptyError("the stack is empty")  #这里也需要自定义一个异常(栈空了需要报异常)            self.index-=1  #指针向下移动            item=self.lst.pop(self.index)  #获取元素删除            return item    s=Stack(5)  #给栈一个大小    s.push("q")    s.push("w")    s.push("e")    s.push("r")    s.push("t")  #往栈里面添加元素    print(s.pop())   #从栈里面拿数据元素    print(s.pop())    print(s.pop())    print(s.pop())    print(s.pop())    print(s.pop())    print(s.pop())  #超出栈大小,抛出异常
View Code
02):队列     队列数据进出原则:先进先出      例子01:
  
import queue   #引入队列模块    q=queue.Queue()  #创建一个队列,固定模板(在queue模块中有一个)    q.put("张三")    q.put("李四")    q.put("王五")    q.put("旺财")    q.put("小白")    print(q.get())    print(q.get())    print(q.get())    print(q.get())    print(q.get())    #打印:张三  李四   王五  旺财  小白    #    print(q.get())  #造成阻塞    print("没有了")    #在队列里面已经没有元素了,还继续拿元素的时候,队列会一直处于执行状态,等待着元素的进入,这个时候就是阻塞了
View Code
03):双向队列
  
from collections import deque  #从系统中自带的collections 模块 引入 deque    q=deque() #创建一个双向队列    q.append("张三")  #从右边末尾开始加元素    q.append("李斯特") #加在最右边,提取数据时候,总是从最右边开始获取    q.appendleft("王五")  #加在最左边,提取的时候总是从最左边开始获取数据    q.appendleft("旺财")    print(q.pop())  #从最右边开始获取    print(q.popleft()) #从最左边开始获取
View Code
04):namedtuple  #命名元组
  
from collections import namedtuple    Point=namedtuple("点",["x","y","z"])    p=Point("zhangshan","lisu","王五")    print(p)    print(p.x)    print(p.y)    print(p.z)    类似于:    class Point:        def __init__(self,x,y):            self.x=x            self.y=y    p=Point(2,3)    p.z=12    print(p.z)
View Code
05):默认字典 defaultdict
  
例子01:    from collections import defaultdict    lst=[11,22,33,44,55,66,77,88,99]    d=defaultdict(list)   #d是一个空列表    for el in lst:        if el<66:            d["key1"].append(el)   #d["key1"]  是一个字典的键,将el 添加到其所对应的键值的列表中        else:            d["key2"].append(el)  #key1 key2 是不存在的,但是可以拿到key1 key2    print(d)  例子2:    from collections import defaultdict    d=defaultdict(list)    #d=defaultdict(abc)    abc 可以是list、set、str等等,作用是当key不存在时,    # 返回的是abc的默认值,比如list对应[ ],str对应的是空字符串,    d["wangwu"]="王五"    print(d["zhangsan"])  #打印:[]    print(d["wangwu"])  #打印:王五
View Code
06):orderdict和defaultdict
  orderdict 顾名思义. 字典的key默认是⽆序的. ⽽OrderedDict是有序的    dic = {
'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'} print(dic) from collections import OrderedDict od = OrderedDict({
'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'}) #从这个3.6版本是看不出来的,但是内部是无序的 print(od)
三:时间模块     获取当前时间 (时间戳)   001:打印本地时间(时间有localtime 和 gmtime )
  import time    print(time.time()) #d打印的时当前时间:1542167144.751588
002格式化时间:
  s=time.strftime("%Y/%m/%d %H:%M:%S")  #string format time    print(s)  #打印:2018/11/14 11:48:02    相似类等待时间 :wait()  #傻等,必须要是 notify()    例子:    while 1:   #这是一个计时器        s=time.strftime("%Y-%m-%d %H:%M:%S")        print(s)        time.sleep(2)  #每隔(睡眠) 2秒 然后再执行打印
003:结构化时间:
  import time    t=time.localtime()    print(t)    #打印:time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=11, tm_min=55, tm_sec=22, tm_wday=2, tm_yday=318, tm_isdst=0)    print(t.tm_year)  #只获取年份,其他的分 秒类似写法
004:将时间戳转换成格式化时间
  
时间戳--〉格式化时间:    import time    a=19888899    t=time.localtime(a)    #t=time.gmtime(0)   #时区   gmtime() 格林尼治时间    print(t)  #打印:time.struct_time(tm_year=1970, tm_mon=8, tm_mday=19, tm_hour=12, tm_min=41, tm_sec=39, tm_wday=2, tm_yday=231, tm_isdst=0)    str_time=time.strftime("%Y/%m/%d %H:%M/%S:%A/%Z",t)    print(str_time)  #打印:1970/08/19 12:41/39:Wednesday    格式化时间--〉时间戳(思路:格式化时间--〉结构化时间--〉时间戳)    import time    # 格式化时间--〉结构化时间    s="2017-2-23 13:45:34"    t=time.strptime(s,"%Y-%m-%d %H:%M:%S")    print(t)  #打印:time.struct_time(tm_year=2017, tm_mon=2, tm_mday=23, tm_hour=13, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=54, tm_isdst=-1)    # 结构化时间--〉时间戳    tt=time.mktime(t)    print(tt) #打印:1487828734.0
View Code
案例:     时间戳和格式化   结构化时间的相互转换(用两种方法写)     例子:     计算时间差(用户输入起始时间和结束时间. 计算时间差(小时),     例如, 用户输入 2018-10-08 12:00:00 2018-10-08 14:30:00 输出 2 小时30分   方法一:
  
思路:格式化时间--〉结构化时间-->时间戳  然后时间戳相减,得到差值,将差值进行转为结构化时间输出    import time    a1="2018-10-08 12:00:00"    a2="2018-10-08 14:30:00"    t1=time.strptime(a1,"%Y-%m-%d %H:%M:%S")  #格式化时间转换为结构化时间  time.strptime(string,format)    #print(t1) #time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=12, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=281, tm_isdst=-1)    t2=time.strptime(a2,"%Y-%m-%d %H:%M:%S")  #格式化时间转换为结构化时间  time.strptime(string,format)    #print(t2) #time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=14, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=281, tm_isdst=-1)    tt1=time.mktime(t1)  #将结构化时间通过time.mktime() 转换为时间戳    # print(tt1)  #1538971200.0    tt2=time.mktime(t2) #将结构化时间通过time.mktime() 转换为时间戳    # print(tt2)   #1538980200.0    tt_new=int(abs(tt1-tt2))   #不知道=谁减去谁,直接一个abs()绝对值就可以了    # print(tt_new)  #9000    tt_last=time.gmtime(tt_new) #在将时间戳转换为结构化时间(不要用time.localtime()  不然会有8小时的时区差)    print(tt_last)  #  time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=2, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)    print("时间差了%d年%d月%d天%d小时%d分钟%d秒" % (tt_last.tm_year-1970,tt_last.tm_mon-1, tt_last.tm_mday-1,tt_last.tm_hour, tt_last.tm_min, tt_last.tm_sec))
View Code
方法二:
  
思路:也是分别将给定的格式化时间转换为时间戳,然后将时间戳转换为结构化时间    import time    a1="2018-10-08 12:00:00"    a2="2018-10-08 14:30:00"    t1=time.strptime(a1,"%Y-%m-%d %H:%M:%S")  #格式化时间转换为结构化时间  time.strptime(string,format)    t2=time.strptime(a2,"%Y-%m-%d %H:%M:%S")  #格式化时间转换为结构化时间  time.strptime(string,format)    tt1=time.mktime(t1)  #将结构化时间通过time.mktime() 转换为时间戳    tt2=time.mktime(t2) #将结构化时间通过time.mktime() 转换为时间戳    tt_new=int(abs(tt1-tt2))   #不知道谁减去谁,直接一个abs()绝对值就可以了    print(tt_new)  #9000  这个是秒    tt_Hour=tt_new//3600    print(tt_Hour)  #显示出:小时  2    tt_Min=int((tt_new-tt_Hour*3600)/60) #显示出来还剩下多少分钟    print(tt_Min)  #显示出来分钟  30    print("时间差是%s小时%s分钟" % (tt_Hour,tt_Min))
View Code
 
⽇期格式化的标准:
  
%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 当前时区的名称    %% %号本身
View Code
四:random 模块
import random  #引入随机数模块    print(random.randint(1,9))  #1到9 随机产生 一个整数  (前闭后闭  可以取到9)    print(random.random())  #随机产生一个(0,1)之间的小树    print(random.choice([1,"张三",["李四","王五","赵四"]]))  # 从这些元素中随机产生一个    print(random.sample([["1","2","3"],"旺财","小白",123],2))   #2 代表从这些数据中随机产生2个出来组成,可也可以改成其他3等等    lst=[14,6,8,2,32,1,90,7]    random.shuffle(lst)    print(lst)  #每次返回的数据都不一样。random对其顺序打乱了    lst的返回值为None
五:os模块(所有的和操作系统相关的内容都在os模块)
  
import os    os.makedirs("123/345")  #可⽣成多层递归⽬录    os.removedirs("123")   #FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: '123/345'    os.removedirs("123/345")  #删除123文件夹下的345文件夹或则文件,如果文件夹下有其他文件,则无法进行删除操作    os.mkdir('123') #生成单级目录;相当于shell中mkdir dirname    os.rmdir('123') #删除单级空⽬录,若⽬录不为空则⽆法删除,报错;相当于shell中    print(os.listdir("../整理--day019 约束和异常处理/"))  #返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序    os.remove("123/234")  #删除123文件夹下的234文件(或则文件夹) ,当234文件夹内有内容时,无法删除    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下为"\r\n",Linux下为"\n"    os.pathsep 输出⽤于分割⽂件路径的字符串 win下为;,Linux下为:    os.name 输出字符串指示当前使⽤平台。win->'nt'; Linux->'posix'    os.stat() 属性解读:    stat 结构:    st_mode: inode 保护模式    st_ino: inode 节点号。    st_dev: inode 驻留的设备。    st_nlink: inode 的链接数。    st_uid: 所有者的⽤户ID。    st_gid: 所有者的组ID。    st_size: 普通⽂件以字节为单位的⼤⼩;包含等待某些特殊⽂件的数据。    st_atime: 上次访问的时间。    st_mtime: 最后⼀次修改的时间。    st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在    其它系统上(如Windows)是创建时间(详细信息参⻅平台的⽂档)。
View Code
六. sys模块     所有和python解释器相关的都在sys模块.
sys.argv 命令⾏参数List,第⼀个元素是程序本身路径    sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)    sys.version 获取Python解释程序的版本信息    sys.path 返回模块的搜索路径,初始化时使⽤PYTHONPATH环境变量的值    sys.platform 返回操作系统平台名称
 
 

 

转载于:https://www.cnblogs.com/one-tom/p/9960253.html

你可能感兴趣的文章
学用MVC4做网站五:文章
查看>>
学习C++ -> 引用( References )
查看>>
分享:在Qt工程中加Boost
查看>>
远程桌面相关
查看>>
减少Linux 电耗 转自IBM
查看>>
新的一年又开始了,加油2013!
查看>>
Sharepoint学习笔记—习题系列--70-573习题解析 -(Q22-Q24)
查看>>
ios block循环引用问题
查看>>
地图覆盖物
查看>>
项目中出现黄色感叹号 教你去掉Myeclipse的黄色感叹号
查看>>
python手记(9)
查看>>
hdu 2451 Simple Addition Expression(数位DP )成败在于细节
查看>>
在开机广播中启动服务
查看>>
poj1077
查看>>
第二步 (仅供参考) sencha touch 使用cmd打包apk
查看>>
ios测试宏指令出错:“Expected identefier”
查看>>
.Net开发笔记(二十)创建一个需要授权的第三方组件
查看>>
_tfopen 打开文件
查看>>
SharePoint如何模拟用户
查看>>
ORACLE删除字段(set unused的用法)
查看>>