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]