python编程:(五)列表操作

admin 2021年03月23日 557次浏览

1、列表定义

列表是由一系列变量组成的可变序列容器

2、基础操作

  • 创建列表

    列表名 = []

    列表名 = list(可迭代对象)

  • 添加元素

    • 追加到列表最后
      列表名.append(元素)
    • 插入到指定索引位置
      列表.insert(索引,元素)
  • 修改列表
    列表名[索引或切片] = 对象

  • 定位元素
    索引、切片

  • 列表切片(创建新列表)
    列表名 = 列表名[切片]

  • 遍历列表

    • 正向:
      for 变量名 in 列表名:
      变量名就是元素
    • 反向:
      for 索引名 in range(len(列表名)-1,-1,-1):
      列表名[索引名]就是元素
  • 删除元素:

    • 语法
      列表名.remove(元素)
      列表名.pop()
      del 列表名[索引或切片]

    • 说明

      • 使用pop()方法删除的数据可以重复使用

      • 如需重复使用pop()删除的数据,首先需要将需要删除的数据赋值到一个变量中,然后删除这个变量

      • pop()方法不带索引,则删除最后一个元素,添加索引,则删除指定索引位置的元素

      • 示例

        list01 = ['zs', 'ls', 'ww', 'cl']
        d1 = list01.pop(1)
        print(list01)
        print(d1)
        
        # 结果
        ['zs', 'ww', 'cl']
        ls
        
  • 数据排序

    • 正向排序
      列表.sort()

    • 反向排序
      列表.sort(reverse=True)

    • 示例

      list01 = ['zs', 'ls', 'ww', 'cl']
      list01.sort()
      print(list01)
      
      # 结果
      ['cl', 'ls', 'ww', 'zs']
      
    • 反转整个列表

      • 语法
        列表.reverse()

      • 示例

        list01 = ['zs', 'ls', 'ww', 'cl']
        list01.reverse()
        print(list01)
        
        # 结果
        ['cl', 'ww', 'ls', 'zs']
        
      • 说明
        reverse()仅对整个列表进行反转,而不排序

    • 注意事项
      存在问题:在一个列表中删除多个元素时,程序内部会使用后一个元素覆盖前一个元素,因此会导致删除不完整
      解决方法:从列表最后往前倒序删除,或者使用pop()方法

  • 列表基础操作_示例

    # ---------- 1、创建列表 ----------
    # 创建空列表
    list01 = []
    list01 = list()
    
    # 创建具有默认值的列表
    list02 = [1,"a",True]
    
    # 字符串转列表
    list02 = list("message")
    
    # 使用 range 生成列表
    list02 = list(range(5))
    
    # ---------- 2、增加元素 ----------
    # 追加元素
    list02.append("append")
    
    # 插入(索引,元素)
    list02.insert(3,"insert")
    
    # ---------- 3、删除元素 ----------
    # 根据元素删除
    list02.remove('a')
    
    # 根据索引删除
    del list02[3]
    
    # 使用pop()删除最后一个元素
    list02.pop()
    
    # 使用pop()删除指定索引元素
    list02.pop(2)
    
    # ---------- 4、修改 ----------
    list02[0] = "第一个元素"
    
    # ---------- 5、切片:定位多个元素 ----------
    # 获取前三个元素 (重新创建新列表)
    list03 = list02[:3]
    
    # 修改后两个元素
    list02[-2:] = ["倒数第2个元素","倒数第1个元素"]
    
    # 通过切片定位2个元素,修改为3个元素
    list02[2:4] = ["a","b","c"]
    
    # 通过切片定位3个元素,修改为0个元素(等同于删除元素)
    list02[2:5] = []
    
    # ---------- 6、查询元素 ----------
    # 获取所有元素
    for item in list02:
        print(item)
    
    # 倒序获取所有
    for i in range(len(list02)-1, -1, -1):
        print(list02[i])
    

3、深拷贝和浅拷贝

  • 浅拷贝

    • 作用

      复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程

    • 语法

      list02 = list01[:]

  • 深拷贝:

    • 作用

      复制整个依懒的变量,拷贝后与拷贝前无关

    • 语法

      import copy
      list02 = copy.deepcopy(list01)

4、列表、字符串转换

4.1、列表与字符串的异同

  • 列表和字符串都是序列,元素之间有先后顺序关系

  • 字符串是不可变的序列,列表是可变的序列

  • 字符串中每个元素只能存储字符,而列表可以存储任意类型

  • 列表和字符串都是可迭代对象

4.2、操作函数

  • 将列表元素拼接为字符串
    变量 = "连接符".join(列表)

    • 示例

      list01 = ['张三','李四','王五']
      out_str = ' / '.join(list01)
      
      # 结果
      张三 / 李四 / 王五
      
  • 把字符串拆分为列表元素
    列表 = “字符串”.split(“分隔符”)

    • 示例

      str = '张三,李四,王五'
      list01 = str.split(',')
      
      # 结果
      ['张三', '李四', '王五']
      

5、列表推导式

  • 定义
    使用简易方法,将可迭代对象转换为列表

  • 语法
    变量 = [表达式 for 变量 in 可迭代对象]
    变量 = [表达式 for 变量 in 可迭代对象 if 条件]

  • 说明
    如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃

  • 示例

    # 将list01中大于10的数据,+1再存储另外一个列表
    list01 = [5,15,55,6,31,7]
    list02 = []
    for item in list01:
        if item > 10:
            list02.append(item + 1)
    
    # 列表推导式
    list03 = [item + 1 for item in list01 if item > 10]
    

6、列表推导式嵌套

  • 语法
    变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2]

  • 传统写法

    list = []
    for r in  ["a", "b", "c"]:
        for c in ["A", "B", "C"]:
            list.append(r + c)
    
  • 推导式写法

    list= [r + c for r in list01 for c in list02]