• python基础-列表元组字典


    1.列表和元组

      列表可以对数据实现最方便的存储、修改等操作

    names=["Alex","tenglan","Eric","Rain","Tom","Amy"]
    
    print(names[0])
    print(names[2])
    print(names[-1])
    print(names[-2])
    
    print(names[1:4]) #取下标1到4之间,包括1,不包括4
    print(names[1:-1])#取下标1到-1之间,包括1,不包括-1
    print(names[0:3])
    print(names[:3])  #从头开始取,0可以省
    print(names[3:]) #如果想取最后一个,必须不能写-1,只能这么写
    print(names[3:-1])
    print(names[::2])#2为步数
    names.append("shisan") #追加
    print(names)
    
    names.insert(2,"jun") #在第二个位置前插入数据
    print(names)
    names[2]="111" #修改数据
    
    del names[2] #删除下标为2的数据
    #del names #删除整个列表
    print(names) #会报NameError: name 'names' is not defined
    
    names2=["111","222","333"]
    names.extend(names2) #扩展列表
    print(names)
    names4=['Alex', 'tenglan', 'Eric', 'Rain', 'Tom', 'Amy', 'shisan',['111', '222', '333']]
    name_copy=names4.copy() #浅拷贝,一起修改
    print(name_copy)
    name_copy[7][2]="4444"
    print(name_copy,names4)
    
    import copy
    names_3=copy.deepcopy(names4) #深度拷贝,只修改需要修改
    names_3[7][2]="5555"
    print(names_3,names4)
    
    print(names.count("shisan")) #统计出现次数
    names4=['Alex', 'tenglan', 'Eric', 'Rain', 'Tom', 'Amy', 'shisan','111', '222', '333']
    names5=names4.sort()
    print(names5) #排序,#3.0里不同数据类型不能放在一起
    names6=names4.reverse() #反转
    print(names6,names4)
    

      

    元组是只读列表

     3)字符串操作

     特性:不可修改

    name="shi love yyyy"
    print(name.capitalize()) #首字母大写
    print(name.casefold()) #大写全变不写
    print(name.center(50,"-"))
    print(name.count("y")) #统计y出现的次数
    print(name.encode()) #将字符串编码转成bytes格式
    print(name.endswith("y"))#判断字符串是否y结尾
    print(name.index("l"))#查找l,找不到返回-1
    
    name2="shi love {name}"
    print(name2.format(name="22"))
    print(name2.index("s")) #返回s的下标
    print("9aA".isalnum()) # 是否数字和字母
    print("9".isdigit()) #是否为数字
    
    
    intab="shi"
    outtab="123"
    print(name2.maketrans(intab,outtab)) #可以用来加密解密
    print(name2.swapcase()) #大小写互换
    print(name2.ljust(40,"-"))
    print(name2.rjust(40,"-"))
    

    4)字典

      特性1)无序,key必须唯一,天生去重

    info = {
        'stu1101': "TengLan Wu",
        'stu1102': "LongZe Luola",
        'stu1103': "XiaoZe Maliya",
    }
    
    print(info)
    
    info["stu1104"]="shisan"
    info["stu1103"]="jun "
    print(info) #无则添加,有则修改
    
    del info["stu1104"]
    print(info)
    
    info.popitem()
    print(info)
    
    print("stu1102" in info) #判断是否存在
    print(info.get("stu1102")) #获取value
    
    av_catalog = {
        "欧美":{
            "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
            "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
            "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
            "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
        },
        "日韩":{
            "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
        },
        "大陆":{
            "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
        }
    }
    
    av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
    print(av_catalog["大陆"]["1024"])
    
    
    print(info.values()) #获取所有的valus
    b = {1:2,3:4, "stu1102":"龙泽萝拉"}
    info.setdefault() #如是不存在,就用默认值
    info.update(b)
    print(info)
    

    5)集合

    集合是一个无序的,不重复的数据组合,它的主要作用如下:

    • 去重,把一个列表变成集合,就自动去重了
    • 关系测试,测试两组数据之前的交集、差集、并集等关系
    • s=set(["3","5","9","10"]) #创建一个数值集合
      t=set("hello") #创建一个唯一字符集合
      print(s)
      a=t|s  #并集
      a2=t.union(s)#并集
      print(a,a2)
      
      b=t&s  #交集
      b2=t.intersection(s)
      
      print(b,b2)
      c=t-s #差集
      c2=t.difference(s)
      
      print(c,c2)
      
      d=t^s #对称差集
      d2=t.symmetric_difference(s)
      
      print(d,d2)
      t.add('x')
      print(t)
      
      t.update([10,37,42])
      print(t)
      
      t.remove("x")
      print(t)
      print(len(t))
      print('x' in t)
      
      print(s.issubset(t)) #s是否t的子集
      print(s.issuperset()) #s是否是t的父集
      

      6) 文件操作

      对文件操作流程

      1. 打开文件,得到文件句柄并赋值给一个变量
      2. 通过句柄对文件进行操作
      3. 关闭文件 
      4. with 避免打开文件后忘记关闭
      5. 打开文件的模式有:

        • r,只读模式(默认)。
        • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
        • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

        "+" 表示可以同时读写某个文件

        • r+,可读写文件。【可读;可写;可追加】
        • w+,写读
        • a+,同a

        "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

        • rU
        • r+U

        "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

        • rb
        • wb
        • ab
      data=open("yes").read()
      print(data)
      
      f=open("yes",'r')
      #for index,line in enumerate(f.readlines()):
      #    print(index,line.strip( ))
      
      count=0
      for line in f: #一行行读
          if count==1:
              print(line)
          count+=1
      
      f=open("no",'r',encoding="utf-8")
      print(f.tell())
      f.readline()
      print(f.tell())
      f.seek(0)
      print(f.tell())
      print(f.encoding)
      print(f.fileno())
      
      import sys,time
      for i in range(20):
          sys.stdout.write("#")
          sys.stdout.flush()
          time.sleep(0.1)
      

       7. 字符编码

    • 需知:

      1.在python2默认编码是ASCII, python3里默认是unicode

      2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

      3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

      python2

      py2里默认编码是ascii
      文件开头那个编码声明是告诉解释这个代码的程序 以什么编码格式 把这段代码读入到内存,因为到了内存里,这段代码其实是以bytes二进制格式存的,不过即使是2进制流,也可以按不同的编码格式转成2进制流,你懂么?
      如果在文件头声明了#_*_coding:utf-8*_,就可以写中文了, 不声明的话,python在处理这段代码时按ascii,显然会出错, 加了这个声明后,里面的代码就全是utf-8格式了
      在有#_*_coding:utf-8*_的情况下,你在声明变量如果写成name=u"大保健",那这个字符就是unicode格式,不加这个u,那你声明的字符串就是utf-8格式
      utf-8 to gbk怎么转,utf8先decode成unicode,再encode成gbk
      python3

      py3里默认文件编码就是utf-8,所以可以直接写中文,也不需要文件头声明编码了,干的漂亮
      你声明的变量默认是unicode编码,不是utf-8, 因为默认即是unicode了(不像在py2里,你想直接声明成unicode还得在变量前加个u), 此时你想转成gbk的话,直接your_str.encode("gbk")即可以
      但py3里,你在your_str.encode("gbk")时,感觉好像还加了一个动作,就是就是encode的数据变成了bytes里,我擦,这是怎么个情况,因为在py3里,str and bytes做了明确的区分,你可以理解为bytes就是2进制流,你会说,我看到的不是010101这样的2进制呀, 那是因为python为了让你能对数据进行操作而在内存级别又帮你做了一层封装,否则让你直接看到一堆2进制,你能看出哪个字符对应哪段2进制么?什么?自己换算,得了吧,你连超过2位数的数字加减运算都费劲,还还是省省心吧。  
      那你说,在py2里好像也有bytes呀,是的,不过py2里的bytes只是对str做了个别名(python2里的str就是bytes, py3里的str是unicode),没有像py3一样给你显示的多出来一层封装,但其实其内部还是封装了的。 这么讲吧, 无论是2还是三, 从硬盘到内存,数据格式都是 010101二进制到-->b'xe4xbdxa0xe5xa5xbd' bytes类型-->按照指定编码转成你能看懂的文字

  • 相关阅读:
    课堂练习-找水王绪
    输入法评估
    课堂练习-找水王
    课堂练习—电梯调度
    第一阶段冲刺总结
    《你的灯亮着吗》阅读笔记Ⅱ
    《你的灯亮着吗》阅读笔记Ⅰ
    软件工程——寻找水桶
    软件工程——寻找水王
    软件工程——典型用户
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/6689669.html
Copyright © 2020-2023  润新知