pin_drop当前位置:知识文库 ❯ 图文

Python列表嵌套


概述

列表嵌套是指列表中的元素也是列表,形成多维数据结构。最常见的是二维列表(矩阵),它在数据处理、游戏开发和科学计算中广泛使用。掌握嵌套列表的创建、访问和遍历,是处理复杂数据结构的基础。


二维列表创建

直接创建

代码示例

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

输出:

代码示例

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

使用列表推导式创建

代码示例

matrix = [[i * 3 + j + 1 for j in range(3)] for i in range(3)]
print(matrix)

输出:

代码示例

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

创建零矩阵

代码示例

rows, cols = 3, 4
zero_matrix = [[0] * cols for _ in range(rows)]
print(zero_matrix)

输出:

代码示例

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

警告:常见陷阱:不要使用 [[0] * cols] * rows 创建矩阵,这会导致所有行引用同一个列表对象。

代码示例

wrong = [[0] * 3] * 3
wrong[0][0] = 1
print(wrong)

输出:

代码示例

[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

提示:修改一行会影响所有行!因为所有行是同一个列表的引用。


访问嵌套元素

通过索引访问

代码示例

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[0][1])
print(matrix[2][0])

输出:

代码示例

2
7

修改嵌套元素

代码示例

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
matrix[1][2] = 99
print(matrix)

输出:

代码示例

[[1, 2, 3], [4, 5, 99], [7, 8, 9]]

遍历嵌套列表

使用嵌套 for 循环

代码示例

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
for row in matrix:
    for element in row:
        print(element, end=" ")
    print()

输出:

代码示例

1 2 3 
4 5 6 
7 8 9 

使用索引遍历

代码示例

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        print(f"matrix[{i}][{j}] = {matrix[i][j]}")

使用 enumerate 遍历

代码示例

for i, row in enumerate(matrix):
    for j, val in enumerate(row):
        print(f"[{i}][{j}] = {val}")

矩阵操作

矩阵转置

代码示例

matrix = [
    [1, 2, 3],
    [4, 5, 6]
]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed)

输出:

代码示例

[[1, 4], [2, 5], [3, 6]]

矩阵加法

代码示例

a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
result = [[a[i][j] + b[i][j] for j in range(len(a[0]))] for i in range(len(a))]
print(result)

输出:

代码示例

[[6, 8], [10, 12]]

按列提取

代码示例

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
col_1 = [row[1] for row in matrix]
print(col_1)

输出:

代码示例

[2, 5, 8]

注意事项

警告:避免 * 创建嵌套列表:[[0]*n]*m 会导致所有行共享同一列表,修改一行会影响所有行。

警告:不规则嵌套:Python 允许每行长度不同的"锯齿"列表,遍历时需注意。

警告:深拷贝:复制嵌套列表应使用 copy.deepcopy(),浅拷贝会导致内部列表共享。


小结

  • 嵌套列表是列表中的元素也是列表,最常见的是二维矩阵

  • 创建矩阵应使用列表推导式,避免 * 运算符的引用陷阱

  • 通过 matrix[i][j] 访问元素,嵌套 for 循环遍历

  • 矩阵转置、加法等操作可用推导式简洁实现


练习题

练习1

编写一个函数 create_identity(n),创建一个 n×n 的单位矩阵(对角线为1,其余为0),使用列表推导式实现。

练习2

给定矩阵 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],编写代码计算每行的和以及每列的和,分别存储在两个列表中。

常见问题

为什么不能用 [[0]*n]*m 创建二维矩阵?

因为 * 运算符会创建多个指向同一列表对象的引用,修改其中一行会影响所有行。正确做法是使用列表推导式 [[0]*n for _ in range(m)]

如何复制一个嵌套列表?

复制嵌套列表应使用 copy.deepcopy() 进行深拷贝,浅拷贝会导致内部列表仍然共享,修改一个副本会影响原始数据。

Python 支持不规则嵌套列表吗?

支持。Python 允许每行长度不同的"锯齿"列表,例如 [[1, 2], [3, 4, 5], [6]]。遍历时需注意每行长度可能不同,建议使用 for row in matrix: for item in row 的方式遍历。

标签: 列表嵌套 二维矩阵 Python基础 矩阵操作 数据结构 编程入门

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python列表推导式 下一篇: Python元组创建与访问

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。