You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

详解Python双层列表推导式实现矩阵转置的分步执行过程

详解Python双层列表推导式实现矩阵转置的原理

先明确我们的基础数据和目标代码:
原矩阵:

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

实现转置的列表推导式:

transposed_matrix = [[row[i] for row in matrix] for i in range(4)]

先把列表推导式“展开”成普通循环,更容易理解

其实这个双层列表推导式就是嵌套for循环的紧凑写法,展开后是这样的:

transposed_matrix = []
# 外层循环:遍历原矩阵的列索引
for i in range(4):
    current_transposed_row = []
    # 内层循环:遍历原矩阵的每一行
    for row in matrix:
        # 取出当前行的第i个元素(也就是原矩阵的第i列元素)
        current_transposed_row.append(row[i])
    # 把收集好的列元素作为转置矩阵的一行加进去
    transposed_matrix.append(current_transposed_row)

分步拆解每一轮循环的执行过程

矩阵转置的核心逻辑是:把原矩阵的第i列,变成转置矩阵的第i行,我们跟着循环一步步走:

  • 当i=0时(处理原矩阵的第0列)
    遍历matrix的每一行,依次取出每行索引为0的元素:

    • 第一行[1,2,3,4]row[0] → 1
    • 第二行[5,6,7,8]row[0] → 5
    • 第三行[9,10,11,12]row[0] → 9
      收集到的current_transposed_row[1,5,9],添加到transposed_matrix后,此时结果是[[1,5,9]]
  • 当i=1时(处理原矩阵的第1列)
    同样遍历每一行取索引1的元素:

    • 第一行取2,第二行取6,第三行取10
      收集到[2,6,10],添加后结果变成[[1,5,9], [2,6,10]]
  • 当i=2时(处理原矩阵的第2列)
    取出每行索引2的元素:3、7、11
    收集到[3,7,11],添加后结果是[[1,5,9], [2,6,10], [3,7,11]]

  • 当i=3时(处理原矩阵的第3列)
    取出每行索引3的元素:4、8、12
    收集到[4,8,12],添加后最终得到完整的转置矩阵:
    [[1,5,9], [2,6,10], [3,7,11], [4,8,12]]

核心原理总结

这个双层列表推导式的逻辑是:

  1. 外层循环for i in range(4):控制我们要提取原矩阵的哪一列(i就是列索引)
  2. 内层循环for row in matrix:遍历原矩阵的每一行,取出当前行的第i个元素
  3. 把同一列的所有元素收集成一个列表,这个列表就是转置矩阵的一行

另外提个小细节:这里range(4)是因为原矩阵每行有4个元素(也就是4列),如果原矩阵的列数变化,这个数字也要对应调整哦。

内容的提问来源于stack exchange,提问作者Deep

火山引擎 最新活动