1 序列简介(squence)
字符串 str
列表 list
元组 tuple
2列表定义
a) 列表中有一系列特定元素组成的,元素之间可能没有任何关联,但是他们之间有先后顺序关系;
b) 列表元素可以使任何类型的 列表,元组,字符串,整型等等;
列表可以改变各个元素的值;
c) 列表是一种容器;
d) 一个列表中的元素的可以是不同类型;
e) 元素可重复;
3 创建空列表
L= []
L= list()
4 创建非空列表
L =[1,2,2,4,3]
L =[“zhang”,”houhui”]
L =[1,1.0,[2,”SHANGHAO”],4]
5 列表的生成函数list()
List()生成一个空列表 等同于[]
List(iterable)用可迭代对象初始化一个列表
L= List(“hello”) #执行结果 L –> [“h”,”e”,”l”,”l”,”o”]
6列表运算
1)算术运算
+,+=,*,*=
(1)+加号运算符号
用于拼接列表(生成一个新的列表)
X=[2,3,4]
Y= [3,4,5]
Z = X+Y
(2)+=运算符
用于元列表与右侧列表拼接生成的新列表
X=[”shangha”,”hunan”,”Chongqing”]
X+= [1,2,3]
(3)* 运算符
用于生成重复的列表
L=3*[1,2]
L= [1,2] * 3
(4)*=
用元列表生成重复的列表,并改变变量的绑定
2) 关系(比较)运算
>,<,<=,>=,==,!=
(1)示例
第一种情况 X=[1,2,3] Y=[2,3,4] X != Y # True X == Y # False X < Y # True X>Y # False
|
第二种情况 X=[1,2,3] Y = [3,2,0] X < Y # True X>Y # False 第3种情况 X=[1,2,3] Y = [3,0,0] X < Y #True X> Y #False
|
第4种情况 Y = [3,0] X=[1,2,3] X < Y #True X> Y #False |
规律: 比较相等(==)和不等(!=) 长度和下标相同的元素对比 比较大小 即比较长度又比较内容 内容占先 |
3)列表的in/not in 运算符
X = [1,’two’,3.0,’four’]
(1)示例
表达式 | 结果
|
1 in X | #True |
2 not in X | # True |
“3” in X | #False |
3 in X | #True(注意) |
7列表的基本操作
1)索引 index
(1)语法
列表名[index]
l[0]
等同于字符串索引:
正向索引:从0到(len(列表名)-1)
反向索引:-len(列表名)到 -1
注释:下标是0的位,也是-len位
列表是可变的,可以通过索引赋值改变列表的元素
2)切片 slice
(1)语法
[:][::]
[表达式1: 表达式2:表达式3]
注释:从下标为表达式1结果开始,按照表达式3结果的步长截取下标为表达式2结果之前的列表
(2)示例
M = [1,2,3,4,5,6] M[1:2] 结果为 [2] M[1:5:2] 结果为[2,4] 列表切片的规则等同于字符串切片规则
|
X = [1,2,2,3,4,5] Y= X[1::2] #Y=[2,3,5] 解释 1开始,2是步长 |
3)切片赋值
切片赋值可以改变元列表的排列,及插入删除数据
列表中可以用切片改变列表对应元素的值
(1)示例
L =[2,3,4] |
|
L[0:1] =[1.1,1.2] | #L=[1.1,1.2,3,4] |
L[2:] =[3.3,4.4,5.5] | #L =[1.1,1.2,3.3,4.4,5.5] |
L[:] =[3,4] | #L =[3,4] #直接切出来原列表 |
L [1:1] =[3.3,4.4,5.5] | #L = [3, 3.3, 4.4, 5.5, 4] 相当于插入下标为1,
|
(2)示例
T=[1,2,3,4,5,6] 注意:步长大于1,可能会出现赋值错误问题
| |
T[0::2] = [1.1,3.3,5.5] | #T=[1.1,2,3.3,4,5.5,6] 替换原有元素 |
T[0::2] =[0.1,0.2] | #报错,切片有三个元素,只赋值两个
|
(3)示例
M = [1,2,3,4,5,6]
| |
M[::2] =”ABC” | #对的 M[::2] 为 1,3,5 |
M[::2] = ‘ABCD’ | #错的,多出一个字母D
|
(4)示例
M = [1,2,3,4,5,6]
|
>>> M = [1,2,3,4,5,6] >>> M2 =M[::2] #注释:此过程是创建一个新的列表 >>> M1=M #注释:将M1和M同时绑定到列表[1,2,3,4,5,6],如果此列表改变,则M1和M同时改变 >>> M[::2]=[10,11,12] >>> M [10, 2, 11, 4, 12, 6] >>> M1 [10, 2, 11, 4, 12, 6] >>> M2 [1, 3, 5] 注意: M1, M, M2 切片赋值改变原有列表,不会生成新的列表 M1 M 绑定 切片值赋值,会生成新的列表 M2 M 绑定 变量其实是一个地址信息,这是python语言和其他语言不同的地方 |
8 python3中常用序列函数
len(x) 序列长度
max(x) 序列最大值
min(x) 序列最小值
sum(x) 序列元素和
any(x) 真值测试,如果列表中一个值为真值,则返回True
all(x) 真值测试,如果列表中所有值都为True则返回True
9 python3中列表常用方法:
方法必须借助于对象调用,必须加(),函数则可以直接使用
见:help(list)
以下L代表列表 (增,删,改,排序,复制) | |
L.index(v[,begin[,end]]) | 返回对应元素的索引下标,begin为开始索引,end为结束索引 (v代表列表元素)
|
L.index(v,begin,end) | begin end 均可省略 |
L.insert(index,obj) | 将obj放入到指定的位置 |
L.count(x) | 返回列表中元素的个数 (x是元素) |
L.remove(x) | 从列表中删除第一次出现在列表中的值
|
L.copy() | 复制此列表(只能复制一层,不进行深层复制) L1=L.copy();此时对L进行复制后,L1和L不是同一个列表; >>> L=[20,30,40] >>> L1=[10,L,50] #列表的嵌套 >>> L2=L1.copy() >>> L[0]=15 >>> L1 [10, [15, 30, 40], 50] >>> L2 [10, [15, 30, 40], 50] >>> 其中如果修改L中的内容,L1和L2中的L均会变化 如果修改L1特有的,则对L2不会产生影响 其实这里面是c语言中指针的概念
|
L.append(x) | 在列表末尾追加单个元素
|
L.extend(lst) | 向列表追加另一个列表 (注意:L+=[4,5,6]生成一个新列表绑定到L;而用extend还是原有列表)
|
L.clear() | 清空列表 等同于L[:] =[](注意:此方法改变的是原有列表, L=[] 此时是将[]重新绑定到 L,是新列表) |
L.sort(reverse=False) | 将列表的顺序按值大小顺序进行排列 小→大(升序) reverse=True(降序) 是从大到小
|
L.reverse() | 列表反转
|
L.pop([index]) | 删除索引对应的元素,如果不加索引,默认删除最后一个元素,同时返回移除元素
|
9列表的嵌套,上面有示例
10 复制列表
深拷贝和浅拷贝
浅拷贝 shallow copy
L.copy()
L[:] #切片复制是浅拷贝
深拷贝 deep copy
是将对象逐层复制(复制后的对象完全独立)
步骤:
1)import copy 导入copy模块
2)对象2 = copy.deepCopy(对象1) #调用深拷贝函数进行复制
11 del运算符
1)作用
用于删除列表元素
2)示例
Cities = [“beijing”,”shanghao”,”guangzhou”]
删除shanghao
Cities.remove(”shanghao”)
Cities.pop(1)
delcities[1]
12 列表是可迭代对象
L=[2,3,5,7]
Forx in L
Print(L)
13 列表推导式 list comprehension
列表推导式是用可迭代对象,依次生成列表内元素的方式
1)语法:
[表达式 for变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 条件表达式]
2)示例
# 要生成如下列表 [1,4,9,16,······] L =[x**2 for x in range(1,11,2)]
|
扩展:
L =[x**2 for x in range(1,11)] L =[x**2 for x in range(1,11) if x%2==1] 解释:取range中的数赋值给x,然后判断x是否满足条件,满足才进行最前面表达式的运算,否则从循环中继续取数 |
14列表推导式的嵌套
1)语法:
[表达式1 for 变量1 in 可迭代对象1 (if 条件表达式1) 表达式2 for 变量2 in 可迭代对象2 (if条件表达式2)]
2)示例
将列表[2,3,5]中的元素,与列表[7,11,13]的元素分别相乘,将得到的元素放于列表中
L = [x*y for x in [2,3,5] for y in [7,11,13]] #双重循环
L =[x*y for x in [2,3,5] if x%2==1 for y in [7,11,13] if y%2==1]
注意 前后两个可迭代对象之间必须在最前面的表达式