• Python学习Day2


    1.集合

    集合特性:

    (1)去重,创造一个集合的时候自动剔除了重复项。

    (2)关系测试,测试两组数据之间的交集,并集,差集,对称差集,子集等关系。

     1 list_1 = [1,2,3,4,5,2,3,5,7]
     2 list_1 = set(list_1)
     3 
     4 list_2 = set([2,5,8,9])
     5 print(list_1,list_2) #集合也是无序的,可以去重
     6 
     7 print(list_1.intersection(list_2))  #交集
     8 print(list_1 & list_2)              #符号表示交集
     9 
    10 print(list_1.union(list_2))         #并集
    11 print(list_1 | list_2)              #符号表示并集
    12 
    13 print(list_1.difference(list_2))    #差集
    14 print(list_1 - list_2)              #符号表示差集
    15 
    16 list_3 = set([1,2,3])
    17 print(list_3.issubset(list_1))      #判断子集
    18 print(list_1.issuperset(list_3))    #判断父集
    19 
    20 print(list_1.symmetric_difference(list_2))  #对称差集,互相都没有的组合在一起
    21 print(list_1 ^ list_2)                      #符号表示对称差集
    22 
    23 print("------------------------")
    24 list_4 = set([4,5,6])
    25 print(list_3.isdisjoint(list_4))    #两集合没有交集返回true
    26 
    27 list_1.add(999)                     #添加一项
    28 list_1.update([888,777,555])        #添加多项
    29 list_1.remove(999)                  #移除一项
    30 print(len(list_1))                  #长度
    31 
    32 print(list_1)
    33 print(list_1.pop())                 #任意移除一项并返回
    34 
    35 list_1.discard()                    #删除元素的时候当元素存在的时候删除,不存在的时候do nothing
    View Code

    2.文件

    a.模式:

    (1) "r":只读,不可写。第一次读取文件的时候会到一个位置,第二次读取文件的时候会从上次的位置开始,而不是从头开始

    (2)"w":只写,不可读,会打开一个新的文件,覆盖掉之前的文件(慎重使用)

    (3)"a":只写,不可读,会在原来的文件后面进行追加

    1 #f = open("apologize",'r+',encoding="utf-8")  #文件句柄 读写
    2 #f = open("apologize",'w+',encoding="utf-8")  #文件句柄 写读
    3 #f = open("apologize",'a+',encoding="utf-8")  #文件句柄 追加读写
    4 #f = open("apologize",'rb')  #文件句柄 二进制文件 (网络传输)
    5 f = open("apologize",'wb')
    6 f.write("hello binary
    ".encode())  #字符写入二进制的时候会出现问题,需要转化为二进制
    7 f.close()
    View Code

    b.注意点:

    (1)每次操作完文件之后一定要f.close()

    c.方法:

    1 print(f.tell())        #得出此时读到的光标的位置
    2 print(f.tell())        #按字符来计数
    3 f.seek(0)              #回到指定位置
    4 print(f.encoding)      #打印文件编码
    5 print(f.fileno())      #返回文件句柄在系统的编号
    6 print(f.flush())       #强制刷新,强制将数据存储到硬盘中
    7 print(f.closed)        #判断文件是否关闭
    8 f.truncate(10)         #从头开始截断
    View Code

    d.进度条实现:

    1 import sys,time
    2 
    3 for i in range(50):
    4     sys.stdout.write("#")       #在一行中写,不会换行
    5     sys.stdout.flush()          #强制刷新(因为内存会缓存满数据之后再存储到硬盘中,加一个
    6                                 #强制刷新,可以实时的将数据存储到硬盘中)
    7     time.sleep(0.2)             #时间延迟
    View Code

    e.文件修改:

    修改文件的方法是重新写入一个新的文件,通过一个循环,在原文件中判断,然后replace替换

     1 f = open("apologize",'r',encoding="utf-8")
     2 f_new = open("apologize.bak",'w',encoding="utf-8")
     3 
     4 for line in f:
     5     if "只能沉默无言" in line:
     6         line = line.replace("只能沉默无言","有好多话说")
     7 
     8     f_new.write(line)
     9     
    10 f.close()
    11 f_new.close()
    View Code

    f.with:

    with语句结束之后自动关闭文件

    1 with open("apologize",'r',encoding="utf-8") as f:
    2     for line in f:
    3         print(line)
    View Code

    3.字符编码与转码:

    参考文章:

    http://www.cnblogs.com/luotianshuai/articles/5735051.html

    http://www.cnblogs.com/yuanchenqi/articles/5956943.html

    http://www.diveintopython3.net/strings.html

    (1)Python3默认是Unicode编码

     1 # -*- coding: utf-8 -*-
     2 
     3 import sys
     4 print(sys.getdefaultencoding()) #查询默认编码方式
     5 
     6 s = "你好"
     7 s_gbk = s.encode("gbk") #Python默认是Unicode编码
     8 s_gbk_utf8 = s_gbk.decode("gbk").encode("utf-8")
     9 print(s.encode("gbk"))
    10 print(s_gbk_utf8)
    11 print(s.encode("utf-8").decode("utf-8").encode("gb2312"))
    View Code

    (2)编码转换图示:

    4.函数:

     1 def func(x,y,z):
     2     print(x)
     3     print(y)
     4     print(z)
     5     
     6 func(1,y=2,z=3)   #位置参数不能在关键字参数前面
     7 
     8 #默认参数特点:调用函数的时候,默认参数非必须传递
     9 #用途:1.默认安装值
    10 
    11 #*args:接受n个位置参数,转换成元组的方式
    12 #**kwargs:把n个关键字参数,转换成字典的方式
    View Code

     a.函数特性:

    (1)减少重复代码

    (2)使程序变的可扩展

    (3)使程序变的易维护

    b.局部变量:

     1 age = 18
     2 
     3 def change_name(name):
     4     global age    #将局部变量的作用域改为全局变量
     5     age = 28
     6     print("before name:",name,age)
     7     name = "丑女" #这个函数就是这个变量的作用域,但是列表,集合,字典,类不受影响,可以修改
     8     print("after name:",name)
     9     
    10 name = "mm"
    11 change_name(name)
    12 print(name,age)
    View Code

    c.递归:

    (1)必须有一个明确的结束条件

    (2)每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    (3)递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

  • 相关阅读:
    Codeforces932E. Team Work
    BZOJ2956: 模积和
    Codeforces932D. Tree
    51nod1040 最大公约数之和
    伯努利数
    BZOJ3456: 城市规划
    BZOJ4555: [Tjoi2016&Heoi2016]求和
    Codeforces936C. Lock Puzzle
    BZOJ3771: Triple
    SPOJ LCS2 后缀自动机
  • 原文地址:https://www.cnblogs.com/mumupa0824/p/7473771.html
Copyright © 2020-2023  润新知