包括:
- 二维列表的定义与初始化
- 遍历、索引、切片
- 增删改查
- 推导式操作
- 注意事项
- 与 NumPy 的对比(性能 + 语法)
一、二维列表简介与定义
定义方式 1:直接嵌套列表
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]
定义方式 2:列表推导式初始化
rows, cols = 3, 4
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
二、二维列表的访问与遍历
1. 单个元素访问
matrix[0][1]
2. 遍历方式
行优先遍历:
for row in matrix:for item in row:print(item, end=' ')
按索引遍历:
for i in range(len(matrix)):for j in range(len(matrix[0])):print(f"matrix[{i}][{j}] = {matrix[i][j]}")
三、修改、添加、删除操作
1. 修改元素
matrix[1][2] = 99
2. 增加一行或一列
matrix.append([10, 11, 12])
for row in matrix:row.append(0)
3. 删除行或列
del matrix[2]
for row in matrix:del row[1]
四、二维列表推导式
示例:创建 5x5 的乘法表
table = [[i * j for j in range(1, 6)] for i in range(1, 6)]
五、常见二维操作函数
1. 转置矩阵
transposed = [list(col) for col in zip(*matrix)]
2. 按列遍历
for col in zip(*matrix):print(col)
六、注意事项与误区
误区:初始化二维列表时不要使用 *
wrong = [[0]*4]*3
wrong[0][0] = 1
print(wrong)
correct = [[0 for _ in range(4)] for _ in range(3)]
七、二维列表与 NumPy 的对比
操作 | Python 列表 | NumPy 数组 |
---|
定义 | [[1,2],[3,4]] | np.array([[1,2],[3,4]]) |
取值 | a[i][j] | a[i, j] ✅更快 |
转置 | zip(*a) | a.T |
切片 | 复杂 | 简洁如 a[:, 1] |
运算 | 不支持矩阵运算 | 支持如 a + b , a @ b |
性能 | 较慢 | 快得多(C实现) |
NumPy 示例:
import numpy as npa = np.array([[1, 2], [3, 4]])
b = a.T
c = a + b
d = a @ b
print(c)
八、应用场景小例子
1. 图像处理:灰度图矩阵表示
image = [[128, 130, 135], [140, 142, 145], [150, 155, 160]]
brightened = [[pixel + 10 for pixel in row] for row in image]
2. BFS/DFS 中的地图矩阵
grid = [[0, 1, 0],[0, 0, 0],[1, 0, 1]
]
九、小结表
操作 | 示例 |
---|
定义二维列表 | [[0]*cols for _ in range(rows)] |
添加行 | matrix.append([...]) |
添加列 | for row in matrix: row.append(x) |
删除行 | del matrix[i] |
删除列 | for row in matrix: del row[j] |
推导式构建 | [[i*j for j in ...] for i in ...] |
转置 | [list(col) for col in zip(*m)] |