1432 字
7 分钟
Python-列表与元组
列表
1. 创建列表
mlist = [1, 2, 3, 4, 5, 6]_ = []2. 访问列表
print(mlist[0], end=" ")print(mlist[-1])# 1 6for each in mlist: print(each, end=" ")# 1 2 3 4 5 63. 修改列表
3.1 通过下标索引修改
mlist = [1, 1, 3, 4, 5]mlist[1] = 2结果:mlist = [1, 2, 3, 4, 5]
3.2 通过切片修改
mlist[3:] = [2, 1]结果:mlist = [1, 2, 3, 2, 1]
3.3 通过运算符修改
_1 = [1, 2]_2 = [3, 4]_ = _1 + _2# _ = [1, 2, 3, 4]4. 切片
4.1 切片访问列表
mlist = [1, 2, 3, 4, 5, 6]mlist[2:4]# [3, 4]mlist[:3]# [1, 2, 3]mlist[2:]# [3, 4, 5, 6]mlist[:]# [1, 2, 3, 4, 5, 6]mlist[0:6:2]# [1, 3, 5]mlist[::-1]# [6, 5, 4, 3, 2, 1]切片访问语法:列表名[起始下标:停止下标:检索跨度]
注意:切片访问返回的是一个可迭代对象,所以切片可以实现浅拷贝
mlist_copy = mlist[:]4.2 切片修改列表
mlist = [1, 2, 3, 4, 5, 6]mlist[len(mlist):] = [7]# mlist = [1, 2, 3, 4, 5, 6, 7]mlist[len(mlist):] = [8, 9]# mlist = [1, 2, 3, 4, 5, 6, 7, 8, 9]5. 函数
| 函数 | 功能 |
|---|---|
| mlist.append(an element) | 将一个元素追加到列表mlist末尾 |
| mlist.extend(iterable) | 将迭代结果逐个追加到列表mlist末尾 |
| mlist.insert(an index, an element) | 将该元素插入到列表mlist的指定下标位置 |
| mlist.remove(an element) | 将该元素从列表mlist中删除,若元素不在列表内,则会报错 |
| mlist.pop(an index) | 将该下标对应元素从列表中弹出 |
| mlist.clear() | 将列表mlist变为空列表 |
| mlist.sort(key=None, reverse=False) | 将列表mlist排序,参数reverse控制是否倒序 |
| mlist.reverse() | 将列表倒序排列 |
| mlist.count(an element) | 返回这个元素在列表中的个数 |
| mlist.index(an element, start index, end index) | 返回这个元素的下标,若有多个则返回第一个 |
| mlist.copy() | 返回原列表的浅拷贝 |
| len(mlist) | 返回值等于列表mlist的长度 |
6. 嵌套列表
初始化
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]A = [0] * 3for i in range(3): A[i] = [0] * 3注: 不要这样声明嵌套列表:B = [[0] * 3] * 3
这样声明的列表其实是对同一个[0, 0, 0]引用三次
即假设 B[0][0] = 1,则B = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
B[0] is B[1]# True访问
matrix[0]# [1, 2, 3]matrix[0][0]# 1for i in matrix: for j in i: print(j, end=" ")# 空格结尾 print() # 换行# 1 2 3# 4 5 6# 7 8 97. 列表名与列表
x = [1, 2, 3]y = xx is y# True 说明x与y表示同一个列表注:Python中,变量名并不是一个盒子,数据并非储存在变量中,而是变量名与数据挂钩,列表名能够引用其指向的数据
8. 列表拷贝
在Python中,拷贝可以分为浅拷贝和深拷贝
在嵌套结构中,对其中所嵌套元素,浅拷贝仅拷贝其引用,而深拷贝会将嵌套元素也拷贝
mlist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]import copy # 深拷贝所在库mlist_copy1 = mlist # 引用赋值(非拷贝,mlist_copy1 与 mlist 指向同一对象)mlist_copy2 = copy.copy(mlist) # 浅拷贝mlist_copy3 = copy.deepcopy(mlist) # 深拷贝9. 列表推导式
语法:
基本形式:_ = [expression for target in iterable]
筛选形式:_ = [expression for target in iterable if condition]
完整形式:
_ = [expression for target1 in iterable1 if condition1 for target2 in iterable2 if condition2 ... for target3 in iterable3 if condition3]等价于:
_ = []for target1 in iterable1: if condition1: for target2 in iterable2: if condition2: ... _ = expression示例 1.
mlist = [1, 2, 3, 4, 5]mlist = [i * 2 for i in mlist]# mlist = [2, 4, 6, 8, 10]mlist = [char * 2 for char in "Momoyeyu"]# mlist = ['MM', 'oo', 'mm', 'oo', 'yy', 'ee', 'yy', 'uu']matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]diag = [matrix[i][i] for i in range(len(matrix))]# diag = [1, 5, 9]matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]flatten = [col for row in matrix for col in row]# flatten = [1, 2, 3, 4, 5, 6, 7, 8, 9]等价于:
flatten = []for row in matrix: for col in row: flatten.append(col)_ = [[x, y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]# _ = [[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]等价于:
_ = []for x in range(10): if x % 2 == 0: for y in range(10): if y % 3 == 0: _.append([x, y])元组
许多部分与列表相似,因此不多赘述,没有提到的部分基本都可以参考列表进行操作
1. 创建与访问元组
创建:
_1 = (1, 2, 3, 4, 5)_2 = 1, 2, 3, 4, 5_1 == _2 # True_1 is _2 # False注:建立元组可以省略小括号,但一定需要加逗号
x = 1type(x) # <class 'int'>y = 1,type(y) # <class 'tuple'>访问:与访问列表基本一致
2. 元组的修改
元组不可修改,指的是元组中每个元素的指向永远不变,但元素指向的数据可以发生改变
_ = (1, 2, 3 , 4, 5)_[0] = 0# Traceback (most recent call last):# File "<pyshell#9>", line 1, in <module># _[0] = 0# TypeError: 'tuple' object does not support item assignment_ = (1, 2, 3, 4, [1, 2, 3])_[4].append(4)# _ = (1, 2, 3, 4, [1, 2, 3, 4])3. 解包操作
列表,元组,字符串都可以使用解包操作
t = (1, 2, 3)x, y, z = t# x = 1; y = 2; z = 3x, y, z = "Momoyeyu"# Error 左侧变量名和右侧元素数量不等x, y, *z = "Momoyeyu"# x = M; y = o; z = "moyeyu"Python的多重赋值本质就是先将值包装为元组,再解包与各个变量名挂钩
x, y = 1, 2等价于:
_ = (1, 2)x, y = _