一、列表list
(一)列表list:
列表是由一系列元素组成的,元素与元素之间可能没有任何的关联关系,但他们之间有先后顺序关系
列表是一种容器
列表是一种序列
列表是可以被改变的序列
列表的构造函数 list
list() # 生成一个空的列表 等同于[]
list(iterable) # 用可迭代对象创建一个列表
(二)Python3中的序列(iterator):
字符串str
列表list
元组tuple
字节组bytes
字节数组bytearray
(三)列表的运算:
+
+=
*
*=
拼接列表
拼接后,赋给原列表
重复n次后,拼接
重复n次后,赋给原列表
(四)列表的比较运算:
运算符:< <= > >= == !=
示例:
[1,2,3] < [1,2,4] # True
[1,3] > [1,2,4] # True
[5] < [5, 0] # True
["ABC", "123"] > ['abc', '456'] # False
[1, "two"] > ["two", 1] # TypeError
[1] < ['2'] # TypeError
(五)列表的处理
(1)索引
(2)列表的索引赋值
(3)列表的切片
语法:列表[:]、列表[::]
列表的切片取值时,返回一个列表,规则等同于字符串切片规则
(4)列表的切片赋值(可以改变一片,也就可以新增和减少元素,实现插入和削去功能)
例:L = [2,3,4]
①L[0:0] = [0,1]
-->L = [0,1,2,3,4]
②L[3:3] = [5,6]
-->L = [2,3,4,5,6]
③L[1:2] ="ABCD"
-->L = [2,'A',B','C','D',4]
切片赋值注意事项:对于步长不等于1的切片赋值,赋值运算符右侧的可迭代对象提供的元素个数一定要等于切片切出的段数。
例:
L = [1,2,3,4,5,6]
L[::2] = 'abc' 对的
L[::2] = 'abcde' 错的
(5)del语句用于删除列表中的元素
语法:del 序列[整数表达式]
del序列[切片]
示例:del L[0]
del L[::2]
(六)python3常用于序列的函数:
可在交互模式下,help(list)回车查看
len(seq) 返回容器的元素个数
max(x) 返回容器的最大值元素
min(x) 返回容器的最小值元素
sum(x) 返回容器的所有元素的和(元素必须是数值类型)
any(x) 真值测试,如果容器内其中一个值为True,则返回True,否则返回False
all(x) 真值测试,容器内所有元素的布尔值为True才返回True
(七)浅拷贝shallow copy和深拷贝deep copy
L = L[:] 和L = L.copy()都可以复制生成一个副本
(1)浅拷贝:是指复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
示例:
L = [3.1 ,3.2]
L1 = [1,2,L]
L2 = L1.copy() #浅拷贝
L[0]=3.14
-->L1=[1,2,[3.14,3.2]]
-->L2=[1,2,[3.14,3.2]]
#L1[2] 和L2[2]共同拥有L 绑定的对象
(2)深拷贝:
示例:
import copy #导入copy模块
L =[3.1,3.2]
L1 = [1,2,L]
L2 = copy.deepcopy(L1) #深拷贝
L[0] = 3.14
-->L1=[1,2,[3.14,3.2]]
-->L2 =[1,2,[3.1,3.2]] 此列表不受影响
注:深拷贝通常只对可变对象进行深层复制,不可变对象通常不会被复制。id()显示地址。
(3)请理解:
Import copy
L1=[1,2,[3.1,3.2]] #会发生什么?
L2=L1 #会发生什么?
L3=L1.copy #会发生什么?
L4=copy.deepcopy(L1) #会发生什么?
问题:如何把L1里面的3.1改为3.14?
L1[2][0]=3.14
(八)列表和字符串的比较
1. 列表和字符串都是序列,元素之间有先后关系
2. 字符串是不可变的序列,而列表是可变的序列
3. 字符串中每个元素只能存储字符,而列表可以存储任意类型的元素
4. 列表和字符串都是可迭代对象
(九)字符串文本解析方法:split 和join
(1)s.split(sep=None)
将字符串使用sep作为分隔符分割s字符串,返回分割后的字符串列表,当不给定参数时,用空白字符(空格或制表符或换行符)作为分隔符分割
(2)s.join(iterable)
用可迭代对象中的字符串,返回一个中间用S进行分隔的字符串
s = 'hello world'
L = s.split('o')
-->s=['hell',' w','rld']
L = ['hell',' w','rld']
s ='o'.join(L) = 'hello world'
例:' '.join('hello')-->'h e l l o'
(十)列表推导式list comprehension
列表推导式是用可迭代对象依次生成带有多个元素的列表的表达式
作用:用简易方法生成列表
语法:[表达式 for 变量 in 可迭代对象]
或[表达式 for 变量 in 可迭代对象 if 真值表达式]
例:生成1~100内奇数
L =[i for i in range(1,100,2)]
或L=[i for i in range(1,100) if i%2!=0]
(十一)列表推导式的嵌套:
语法:
[表达式1 for 变量1 in 可迭代对象1 if 真值表达式1 for 变量2 in 可迭代对象 2 if 真值表达式2]
示例:
想生成['A1','A2','A3','B1','B2','B3','C1','C2','C3']
[x+y for x in 'ABC' for y in '123']