zoukankan      html  css  js  c++  java
  • Python开发(二):列表、字典、元组与文件处理

    Python开发(二):列表、字典、元组与文件处理

     

      

    一:列表
    二:元组
    三:字典
    四:文件处理

    一:列表

    1.   为什么需要列表

      可以通过列表可以对数据实现最方便的存储、修改等操作。字符串是不能修改的,所以无法对数据进行修改。而且可以通过列表进行方便的取值

      #  列表的操作

    2.   创建列表
      >>> name = ["XiaoMing","XiaoHua","XiaoQiang"]
      >>> name
      ['XiaoMing', 'XiaoHua', 'XiaoQiang']
      
    3.   取值
      >>> name[1]
      'XiaoHua'
      >>> name[2]  # 写入要取的值的位置,从0开始计算
      'XiaoQiang'
      

        

    4.  更改值
      >>> name
      ['XiaoMing', 'XiaoLan', 'XiaoQiang']
      
      >>> name.append("XiaoZi")
      >>> name
      ['XiaoMing', 'XiaoLan', 'XiaoQiang', 'XiaoZi']
      
      #    //*  变量.append(“添加的值”)
      

        

    5.   插入值 
      >>> name
      ['XiaoMing', 'XiaoLan', 'XiaoQiang', 'XiaoZi']
      
      >>> name.insert(2,"XiaoWei")
      >>> name
      ['XiaoMing', 'XiaoLan', 'XiaoWei', 'XiaoQiang', 'XiaoZi']
      
      
      #  //* 插入时:要插在内个位置就写内个数,如上题,将“XIaoWei” 插入低三位,就写2(因为是从0开始计算的),插入以一个就写0

        

    6.   删除值两种方法
      #  1):万能删除法del :(del可以删除内存中的很多变量的值,但是只能删除内存中的值)
      >>> name
      ['XiaoMing', 'XiaoLan', 'XiaoWei', 'XiaoQiang', 'XiaoZi']
      
      >>> del name[1]  # 删除写入要删除的值的索引值
      >>> name
      ['XiaoMing', 'XiaoWei', 'XiaoQiang', 'XiaoZi']
      >>> 
      
      #   2):利用列表的方法删除
      >>> name
      ['XiaoMing', 'XiaoWei', 'XiaoQiang', 'XiaoZi']
      
      >>> name.remove[2]
      >>> name.remove("XiaoWei")   # 删除写入要删除的值
      
      >>> name
      ['XiaoMing', 'XiaoQiang', 'XiaoZi']
      

        

    7.   查找指定值的索引值
      >>> name
      ['XiaoMing', 'XiaoQiang', 'XiaoZi', 'Jack', 'RouSi', 'QingJiao']
      
      >>> name.index("QingJiao")
      5
      

        

    8.   统计列表中的相同值的个数
      >>> name
      ['HuangGua', 'QingJiao', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi', 'HuangGua']
      
      >>> name.count("HuangGua")
      2
      
      # //* 有重复值时,如果要对重复的值进行操作时(删除,查索引等),是操作的从做向有的第一个
      

        

    9.   为列表进行排序:
      #   (1):按照 ASCII 正序排序
      >>> name
      ['XiaoMing', 'XiaoQiang', 'XiaoZi', 'HuangGua', 'RouSi', 'QingJiao']
      >>> name.sort()
      >>> name
      ['HuangGua', 'HuangGua', 'QingJiao', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      
      
      
      #   (2):按照 ASCII 倒序排序
      >>> name
      ['HuangGua', 'HuangGua', 'QingJiao', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      >>> name.reverse()
      >>> name
      ['XiaoZi', 'XiaoQiang', 'XiaoMing', 'RouSi', 'QingJiao', 'HuangGua', 'HuangGua']
      
      # //* 注:如果在列表中有数字的话,就无法对列表进型排序必须将数字换成字符串(也就是添加数字时,如果没有加引号的数字会导致无法排列,必须在添加时,为数字加上引号。)如下:
      
      >>> name
      ['XiaoZi', 'XiaoQiang', 'XiaoMing', 'RouSi']
      >>> name.insert(2,5)
      >>> name
      ['XiaoZi', 'XiaoQiang', 5, 'XiaoMing', 'RouSi']
      >>> name.sort()
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      TypeError: unorderable types: int() < str()
      >>> name[2] = "5"
      >>> name
      ['XiaoZi', 'XiaoQiang', '5', 'XiaoMing', 'RouSi']
      >>> name.sort()
      >>> name
      ['5', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      

        

    10.  取多个值
      #  1) :取 5后面的两个值
      >>> name
      ['5', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      >> name[0:3]  # 0 为要取的值的位置,3为要取到几个索引值那
      ['5', 'RouSi', 'XiaoMing']
      >>> 
      
      # //* 因为截取的值是,顾头不顾尾,所以要取后面两个值要,从所在值的后面在向后延以为,也就是
      
               X + (Y+1) =Z
      
      #  //* X 是你要求值的索引值  ,  Y 是你要求几位   ,   Z是你最后要求到的值的索引值
      
      
      #    2) :求RouSi到最后一个的值
      >>> name
      ['5', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      >>> name[2:]
      ['XiaoMing', 'XiaoQiang', 'XiaoZi']
      #  //*  如果是取到最后的话冒号后面只能不写,否则的话就会因为鼓手不顾尾的原因悟取不到最后一个
      
      
      #  3) :取RouSi到倒数第二个
      >>> name
      ['5', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      >>> name[2:-1]
      ['XiaoMing', 'XiaoQiang']
      #  //*  -1 为倒数第一个, -2 为倒数第二个 以此类推
      

        

    11.  各一个取一个
      >>> name
      ['5', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      >>> name[0::2]   # 取奇数为
      ['5', 'XiaoMing', 'XiaoZi']
      >>> name[1::2]   # 取偶数为
      ['RouSi', 'XiaoQiang']
      

        

    12.    各一个取两个
      >>> name
      ['5', 'RouSi', 'XiaoMing', 'XiaoQiang', 'XiaoZi']
      >>> name[0::3]
      ['5', 'XiaoQiang']  
      >>> 
      
      
      # //* 综上所述: 每各几个取值就在第二个冒号后面写上 ,(N + 1) 个   

    二:元组

      元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

        语法:names = ("alex","jack","eric")

    三:字典

           1:字典的作用,为什么要有字典:由于列表查询值时,需要知道索引值,或者要知道子列表中的所有值,查询时非常不方便,所以取值与查询非常不方便,所以出现了字典,来弥补列表的不足

           2:字典的语法,以及特点:

                  Variable = { key,value }  # 字典

                  Variable = [ 值1,值2,值3 ]  # 列表

                  Variable = (值1,值2,值3)  # 元组

                  1:在字典的key 中,key值必须时唯一的,否则在查询值时,会出现错误,

                  2:字典中的key值,是无序的,key对应的值是不变的,除非人为的对其进行修改

           3:字典的增删改查:

    names = {
    
        "stu1101":{"name":"Alex","age":"22","hobbie":"girl"},
    
        "stu1102":"Jack",
    
        "stu1103":"rain"
    
    }

    1): 查

    print(names["stu1101"]["hobbie"])

    print(names.get("stu1104","abc123"))  #查询stu1104值是否存在,存在就返回他查找的value值,不存在就返回abc123是自己定义的,不定义就返回None。

       (1):查询字典中的所有key值

           print(names.keys())

      (2):查询字典中的所有value值

           print(names. values())

           2): 增加

                  names["stu1104"] = ["zsy",18,"ABC123"]

           3): 改

                  names["stu1104"]='new_value_1'  #如果要替换值,替换后他会将key对应的 value值全部替换掉,无法修改key对应的值中的其中一个值

          

    4):删除

    (1):print(names.pop("stu1101","abc123"))

             # 删除stu1101的值,如果值存在就返回他的删除的value值,不存在就返回abc123,abc123是自己定义的,如果不定义,要删除的值还不存在,就会报错,所以必须加上回显的值

              (2):# del names["stu1103"]

    4:字典的其他操作

           1):fromkeys(变量,value值)   # 将列表改为字典

    //* 注释:

    1:dict是数据类型,只能使用dict才能调用fromkeys()

    2:上图显示 jack 与 eric 对应的value的值是一个内存id ,所以,可以判断,他们指向的,value 值 是一个,所以如果对其中一个进行修改其他的也会跟着改,如图8-4-1。所以,如果不想出现此情况可以对 value值进行修改,如图8-4-2:

    图8-4-1

    图8-4-2

     

           2):items():将字典打印成列表

     

           用途一般是用来循环打印字典信息的:但是效率不高

     

    3):setdefault(N,M):查找N,如果N存在,回示N的value , 如图:图8-4-3,如果N不存在,则添加N,M。(N为key,M为value) 如图:图8-4-4

     

    图8-4-3

     

    图8-4-4

    4):update():合并两个列表,如果两个列表有相同的值,则使用新加入的值 

         

    5):copy():复制一个字典:占用一个单独的内存空间:

           (1):浅 copy

     

    //*注释:1:copy是单独复制出来了一块内存地址,所以两个最外层的字典内存ID不同

    2:第二层的字典ID相同的意义是因为,stu1101对应的value不是直接在整个字典中的,他是 stu1101指向了一个内存的ID,两个字典的二层字典,同时指向了一个ID,所以才出现上面的情况

    例1:可以使用copy的这个共性,实现两个账户同时对一个库的使用,就如同,银行卡的子母银行卡

     

    (2):深copy,完全 copy 连子字典都重新定义

     

                例二:

          

    四:文件操作

           1):打开文件

            print(open("lyric",encoding="utf-8",mode="r")
         # 没有加载到内存,只是获取的文件位置,并且可以操作他了

      //* 注释:

    1:r 只读模式  :打开后,只能读无法对其进行操作

           2:w写入模式,只能写入:写入文件时,没有原文件会创建。有则会覆盖原文件内容

           3:a 追加模式  :追加文件时,没有原文件会创建。有则追加

           2):写入:

          

    结果:

      

           3):追加

           

        结果:

          

           4):例子修改文件内容:

           

           //* 注释:

    1:因为文件是按照顺序重头至尾进行排序的,所以需要要对原文件进行修改就只能进行追加:

    2:要想替换文件内容就只能入上例写入一个新文件,然后在对文件名进行修改

  • 相关阅读:
    Linux线程同步方法
    Linux进程间通信:信号
    孤儿进程僵尸进程及其回收
    Linux守护进程
    Linux系统编程常见函数 (进程/线程)
    Linux系统编程常用函数 (文件/目录)
    C++实现贪吃蛇小游戏
    C++实现简易Vector类
    C++实现简易版字符串类
    《图解HTTP》读书笔记
  • 原文地址:https://www.cnblogs.com/dream4567/p/6297311.html
Copyright © 2011-2022 走看看