Python-列表与元组
列表
1. 创建列表
1 | mlist = [1, 2, 3, 4, 5, 6] |
2. 访问列表
1 | print(mlist[0], end=" ") |
1 | for each in mlist |
3. 修改列表
3.1 通过下标索引修改1
2mlist = [1, 1, 3, 4, 5]
mlist[1] = 2
结果:mlist = [1, 2, 3, 4, 5]
3.2 通过切片修改1
mlist[3:] = [2, 1]
结果:mlist = [1, 2, 3, 2, 1]
3.3 通过运算符修改1
2
3
4_1 = [1, 2]
_2 = [3, 4]
_ = _1 + _2
# _ = [1, 2, 3, 4]
4. 切片
4.1 切片访问列表
1 | mlist = [1, 2, 3, 4, 5, 6] |
切片访问语法:列表名[起始下标:停止下标:检索跨度]
注意:切片访问返回的是一个可迭代对象,所以切片可以实现浅拷贝1
mlist_copy = mlist[:]
4.2 切片修改列表
1 | mlist = [1, 2, 3, 4, 5, 6] |
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的长度 |
Translation:
- element: 元素
- index: 下标
6. 嵌套列表
初始化1
2
3
4
5
6
7matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
A = [0] * 3
for 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]]1
2B[0] is B[1]
# True
访问1
2
3
4
5
6
7
8
9
10
11matrix[0]
# [1, 2, 3]
matrix[0][0]
# 1
for i in matrix:
for j in i:
print(j, end=" ")# 空格结尾
print() # 换行
# 1 2 3
# 4 5 6
# 7 8 9
7. 列表名与列表
1 | x = [1, 2, 3] |
注:Python中,变量名并不是一个盒子,数据并非储存在变量中,而是变量名与数据挂钩,列表名能够引用其指向的数据
8. 列表拷贝
在Python中,拷贝可以分为浅拷贝和深拷贝
在嵌套结构中,对其中所嵌套元素,浅拷贝仅拷贝其引用,而深拷贝会将嵌套元素也拷贝1
2
3
4
5mlist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
import copy # 深拷贝所在库
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]
完整形式:1
2
3
4_ = [expression for target1 in iterable1 if condition1
for target2 in iterable2 if condition2
...
for target3 in iterable3 if condition3]
等价于:1
2
3
4
5
6
7_ = []
for target1 in iterable1:
if condition1:
for target2 in iterable2:
if condition2:
...
_ = expression
示例
1
2
3mlist = [1, 2, 3, 4, 5]
mlist = [i * 2 for i in mlist]
# mlist = [2, 4, 6, 8, 10]1
2mlist = [char * 2 for char in "Momoyeyu"]
# mlist = ['MM', 'oo', 'mm', 'oo', 'yy', 'ee', 'yy', 'uu']1
2
3
4
5matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
diag = [matrix[i][i] for i in range[len(matrix)]]
# diag = [1, 5, 9]- 等价于:
1
2
3
4
5matrix = [[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]1
2
3
4flatten = []
for row in matrix:
for col in row:
flatten.append(col) - 等价于:
1
2_ = [[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]]1
2
3
4
5
6_ = []
for x in range(10):
if x % 2 == 0:
for y in range(10):
if y % 3 == 0:
_.append([x, y])
元组
许多部分与列表相似,因此不多赘述,没有提到的部分基本都可以参考列表进行操作
1. 创建与访问元组
创建:1
2
3
4_1 = (1, 2, 3, 4, 5)
_2 = 1, 2, 3, 4, 5
_1 == _2 # True
_1 is _2 # False
注:建立元表可以省略小括号,但一定需要加逗号1
2
3
4x = 1
type(x) # <class 'int'>
y = 1,
type(y) # <class 'tuple'>
访问:与访问列表基本一致
2. 元组的修改
元组不可修改,指的是元组中每个元素的指向永远不变,但元素指向的数据可以发生改变
1 | _ = (1, 2, 3 , 4, 5) |
1 | _ = (1, 2, 3, 4, [1, 2, 3]) |
3. 解包操作
列表,元组,字符串都可以使用解包操作
1 | t = (1, 2, 3) |
1 | x, y, z = "Momoyeyu" |
Python的多重赋值
本质就是先将值包装为元组,再解包与各个变量名挂钩1
x, y = 1, 2
等价于:1
2_ = (1, 2)
x, y = _