python编程day06
列表 list
- 问题:如何将计算机运算的数据临时存入一个地方,同时又方便 添加,删除,修改等操作?
- 容器!
- 列表的定义:
- 列表是一种容器
- 列表是可以被改变的序列
- 列表是由一系列特定元素组成的,元素与元素之间可能没有任何的关联关系, 但他们之间有先后顺序关系
- 创建空列表的字面值:L = [] # [] 创建空列表
- 创建非空列表的字面值:
- L = [1, 2, 3, 4]
- L = ["北京", "上海", "深圳"]
- L = [1, "二", 3.14, 'four']
- L = [1, 2, [3.1, 3.2], 4]
- 列表的构造函数list
- list() 生成一个空的列表,等同于[]
- list(iterable) 用可迭代对象创建一个列表
- 示例:
- L = list()
- L = list(“hello”)
- L = list(range(10))
列表的运算:
- 运算符:
- + += * *=
- + 用于拼接列表 L = [1, 2, 3] + [4, 5, 6]
- L =[1,2,3,4,5,6]
- += 用原列表写右侧列表拼接,并用变量绑定列表
- 语法:x += 可迭代对象
- 示例: x = [1, 2, 3]
- x += [4, 5, 6] , x += "ABC" ,x += range(10, 20, 3)
- print(x) # [1, 2, 3, 4, 5, 6, 'A','B','C', 10, 13, 16, 19]
- * 生成重复的列表
x = [1, 2] * 3 # x = [1, 2, 1, 2, 1, 2]
- *= 用原列表生成重复的列表,并彡变量绑定新列表
x = [1, 2, 3]
x *= 4 # x = [1,2,3,1,2,3,1,2,3,1,2,3]
```
列表的比较运算:
- 运算符:
- < <= > >= == !=
- 说明:
- 列表的比较规则与字符串的比较规则相同
- 列表要求每个元素能依次进行比较,否则会出现类型错误
- 示例:
- [1, 2, 3] < [1, 3, 2] # True
- [1, 2] <= [1, 2, 3] # True
- [1, 4] >= [1, 2, 3] # True
- [1, 'two'] > ['two', 1] # TypeError 类型错误
- [1, "ABC", 123] < [1, "123", "ABC"] # ???
- 列表是可迭代对象:
- L = [1, 3, 5, 7]
- for x in L:
print(x) # 打印1 3 5 7
列表的 in 和 not in 运算符
- in 判断一个值是否存在于列表中,如果存在返回True,否则返回False
- not in 返回值与in 相反
- 示例:
- x = [1, 'two', 3, '四']
- 3 in x # True
- "3" in x # False
- 10 in x # False
- 10 not in x # True
列表的索引操作:
- 语法:
- 列表[整数表达式]
- 用法:
-等同于字符串的索引,索引分正向索引和反向索引,规则写字符串索引规则完全相同
- 示例:
- L = [1, 2, 3, 4]
- print(L[1]) # 2
- print(L[-1]) # 4
- 列表的索引赋值
- 列表是可变的容器,可以通过索引赋值改变列表中的元素
- 语法:
- 列表[整数表达式] = 表达式
- 示例:
- x = [1, 2, 3, 4]
- x[2] = 3.1 # 修改列表中第3个元素的值为3.1
- print(x) # [1, 2, 3.1, 4s]
列表的切片 slice
- 列表[:]
- 列表[::]
- 列表的切片取值返回一个列表,规则等同于字符串的切片取值规则
- 示例:
- x = [1, 2, 3, 4, 5, 6, 7, 8]
- y = x[1::2] # y = [2, 4, 6, 8]
列表的切片赋值:
- 作用:
- 可以改变原列表的排列,可以插入和删除数据
- 可以用切片改变列表对应的元素的值
- 语法:
- 列表[切片] = 可迭代对象
- 说明:
-切片赋值的赋值运算符的右侧必须是一个可迭代对象
- 示例:
L = [1, 1.5, 2.5, 4]
L[1:3] = [2, 3] # L = [1, 2, 3, 4]
L[1:] = [100]
L = [3, 4]
L[0:1] = [1, 2, 3] # L = [1, 2, 3, 4]
L = [3, 4]
L[0:0] = [1, 2] # L = [1, 2, 3, 4]
L = [3, 4]
L[1:1] = [5] # L = [3, 5, 4]
L = [3, 4]
L[2:2] = [5, 6] # L = [3, 4, 5, 6]
L[1:3] = "ABC" # L = [3, 'A', 'B', 'C', 6]
L[1:4] = range(4, 6) # L = [3, 4, 5, 6]
- 切片的注意事项:
对于步长不等于1的切片赋值,赋值运算符的右侧的可迭代对象提供的数据元素的个数一定要等于切片切出的段数
L = [1, 2, 3, 4, 5, 6]
L[::2] = "ABC" # 对的
L[::2] = "ABCD" # 错的
python3 常用于序列的函数:
- len(x) 返回序列的长度
max(x) 返回序列的最大值元素
min(x) 返回序列的最小值元素
sum(x) 返回序列中所有元素的和(元素必须是数值类型)
any(x) 真值测试, 如果序列中其中一个元素值为真值则返回True
all(x) 真值测试,如果弃于列中所有元素都为真值才返回True
- 示例:
L = [8, 3, 6, 2]
print(len(L)) # 4
print(max(L)) # 8
print(min(L)) # 2
print(sum(L)) # 19
print(any(L)) # True
print(all(L)) # True
深拷贝 和 浅拷贝
- 浅拷贝 shallow copy
浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
- 如:
L1 = [1, 2, [3.1, 3.2]]
L2 = L1.copy()
L2[2][0] = 3.14
print(L2) # [1, 2, [3.14, 3.2]]
print(L1) # [1, 2, [3.14, 3.2]]
-深拷贝 deep copy 依次复制所有依懒的对象
- 如:
import copy # 导入复制模块
L1 = [1, 2, [3.1, 3.2]]
L2 = copy.deepcopy(L1)
L2[2][0] = 3.14
print(L2) # [1, 2, [3.14, 3.2]]
print(L1) # [1, 2, [3.1, 3.2]] # L1不变
Python3中常用的列表方法(method)
- 见:help(list)
|方法|意义|
L.index(v [, begin[, end]]) 返回对应元素的索引下标, begin为开始索引,end为结束索引,当 value 不存在时触发ValueError错误
L.insert(index, obj) 将某个元素插放到列表中指定的位置
L.count(x) 返回列表中元素的个数
L.remove(x) 从列表中删除第一次出现在列表中的值
L.copy() 复制此列表(只复制一层,不会复制深层对象)
L.append(x) 向列表中追加单个元素
L.extend(lst) 向列表追加另一个列表
L.clear() 清空列表,等同于 L[:] = []
L.sort(reverse=False) 将列表中的元素进行排序,默认顺序按值的小到大的顺序排列
L.reverse() 列表的反转,用来改变原列表的先后顺序
L.pop([index]) 删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回删除元素的引用关系