当前位置: 首页 > news >正文

Python 中二维列表(list)(嵌套列表)详解

包括:

  • 二维列表的定义与初始化
  • 遍历、索引、切片
  • 增删改查
  • 推导式操作
  • 注意事项
  • 与 NumPy 的对比(性能 + 语法)

一、二维列表简介与定义

定义方式 1:直接嵌套列表

matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]

定义方式 2:列表推导式初始化

# 创建一个 3x4 的全零矩阵
rows, cols = 3, 4
matrix = [[0 for _ in range(cols)] for _ in range(rows)]

二、二维列表的访问与遍历

1. 单个元素访问

matrix[0][1]  # 访问第 0 行第 1 列元素(值为 2)

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. 删除行或列

# 删除第 2 行
del matrix[2]# 删除第 1 列(遍历每一行)
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)
# [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] ❌ 所有行是同一引用# 正确做法:
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]]
# 调整亮度 +10
brightened = [[pixel + 10 for pixel in row] for row in image]

2. BFS/DFS 中的地图矩阵

# 地图 0 表示可走,1 表示障碍
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)]
http://www.xdnf.cn/news/517771.html

相关文章:

  • 3Dmax中用RayFire实现破碎动画效果
  • Python黑魔法与底层原理揭秘:突破语言边界的深度探索
  • TensorRT
  • 提取YOLO检测框-以车牌识别为例
  • 远程文件传输解决方案:用群晖NAS Cloud Sync实现跨地区传输与多人同时传输时的优化
  • 什么是 Boosting
  • BOM知识点
  • 加密芯片法(一)ATSHA204A 特性理解
  • 使用Redission来实现布隆过滤器
  • 【八股战神篇】MySQL高频面试题
  • FreeTex v0.3.0:支持静默运行/软件体积压缩
  • LLM笔记(八)Transformer学习
  • 2025年- H29-Lc137- 19.删除链表的倒数第N个节点(快慢指针)---java版
  • WebSocket解决方案的一些细节阐述
  • 国内人工智能行业研究报告 目录
  • 三相逆变器下垂均流控制策略simulink仿真
  • 通过觅思文档项目实现Obsidian文章浏览器在线访问
  • 基于OpenCV的实时文档扫描与矫正技术
  • Embedding 模型详解:架构、训练与 LLM 的区别
  • Opik: 评估、测试和监控 LLM 应用
  • 进程相关概念总结
  • Windows系统各版本环境变量
  • # 08_Elastic Stack 从入门到实践(八)---2
  • 关于文件分片的介绍和应用
  • Linux基础第三天
  • 例举3种强制类型转换和2种隐式
  • |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面
  • 系统思考:IT企业项目困境分析
  • 基于Java+MySQL+Servlet的留言系统开发全解析
  • 电子电路:怎么理解电子在导体中的热运动?