当前位置: 首页 > 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)]

相关文章:

  • uWSGI是什么?
  • Java中关于方法的调用和递归
  • 【cursor】有效解决
  • Appium自动化测试环境搭建及配置
  • 西门子1200/1500博图(TIA Portal)寻址方式详解
  • AI 制作游戏美术素材流程分享(程序员方向粗糙版)
  • CCpro工程编程软件
  • Git从入门到精通
  • centos7.9扩展已有分区空间
  • [LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
  • bus hound抓取的数据包各字段含义解释
  • DAY26 函数定义与参数
  • 2025年- H28-Lc136- 24.两两交换链表中的节点(链表)---java版
  • Java开发经验——阿里巴巴编码规范实践解析3
  • 创建指定版本的vite项目
  • 【Retinanet】训练自己的数据集
  • InfluxDB 3 Core + Java 11 + Spring Boot:打造高效物联网数据平台
  • LangChain框架实战:从入门到开发大模型应用
  • Pandas 构建并评价聚类模型② 第六章
  • 红黑树的实现
  • 墨海军训练舰在纽约撞桥,墨总统:对遇难者表示悲痛,将跟进调查
  • 慢品巴陵,看总编辑眼中的岳阳如何书写“山水人文答卷”
  • “复旦源”一源六馆焕新启幕,设立文化发展基金首期1亿元
  • 上海这场有温度的“人才集市”,为更多人才搭建“暖心桥”
  • 推开“房间”的门:一部“生命存在的舞台” 史
  • 上海一保租房社区亮相,首批546套房源可拎包入住