鱼C论坛

 找回密码
 立即注册
查看: 2362|回复: 4

[已解决]Python P25讲课后习题 转置矩阵

[复制链接]
发表于 2022-8-9 20:53:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  4. Tmatrix = [[row[i] for row in matrix] for i in range(4)]
  5. #此处列表推导式没有想明白,特别是执行顺序希望有大大们解释一下
  6. #减少括号后能理解Tmatrix = [row[i] for row in matrix for i in range(4)],即为展开原矩阵

  7. print(Tmatrix)
复制代码
最佳答案
2022-8-9 22:47:29
本帖最后由 一点点儿 于 2022-8-9 23:06 编辑
  1. Tmatrix = [[row[i] for row in matrix] for i in range(4)]
复制代码

相当于
  1. Tmatrix = [[row[0] for row in matrix],
  2.            [row[1] for row in matrix],
  3.            [row[2] for row in matrix],
  4.            [row[3] for row in matrix]]
复制代码

也就是
  1. Tmatrix = [[1, 5, 9],
  2.            [2, 6, 10],
  3.            [3, 7, 11],
  4.            [4, 8, 12]]
复制代码



  1. Tmatrix = [[row[i] for row in matrix] for i in range(4)]
复制代码

for循环角度理解的话相当于
  1. Tmatrix = []
  2. for i in range(4):
  3.     Tmatrix.append([row[i] for row in matrix])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-9 22:11:33 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2022-8-9 23:36 编辑
  1. Tmatrix = [[row[i] for row in matrix] for i in range(4)]
复制代码

相当于:(纯手写的,不知道会不会出错)
  1. Tmatrix = []
  2. for row in matrix:
  3.         for i in range(4):
  4.                 Tmatrix.append(row[i])
复制代码


看来一下其他人的回复,果然,写错了(大意了)

应该是这样:
  1. matrix = [[1,2,3,4],
  2.           [5,6,7,8],
  3.           [9,10,11,12]]

  4. Tmatrix = []
  5. for row in matrix:
  6.         temp = []
  7.         for i in range(4):
  8.                 temp.append(row[i])
  9.         Tmatrix.append(temp)
  10. print(Tmatrix)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-9 22:18:34 | 显示全部楼层
本帖最后由 ba21 于 2022-8-9 22:19 编辑
  1. #分解 [[row[i] for row in matrix] for i in range(4)]
  2. tmp = []
  3. for i in range(4):
  4.     tmp.append([row[i] for row in matrix])

  5. #分解 [row[i] for row in matrix]
  6. tmp = []
  7. for i in range(4):
  8.     ####
  9.     tmp2 = []
  10.     for row in matrix:
  11.         tmp2.append(row[i])
  12.     ####   
  13.     tmp.append(tmp2)
  14. print(tmp)
复制代码

  1. # 列表推导式其实就是这样的简写 如:
  2. v = [1, 2, 3]
  3. # 列表推导式
  4. lst = [i for i in v]

  5. # 一般写法
  6. lst = []
  7. for i in v:
  8.     lst.append(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-9 22:47:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 一点点儿 于 2022-8-9 23:06 编辑
  1. Tmatrix = [[row[i] for row in matrix] for i in range(4)]
复制代码

相当于
  1. Tmatrix = [[row[0] for row in matrix],
  2.            [row[1] for row in matrix],
  3.            [row[2] for row in matrix],
  4.            [row[3] for row in matrix]]
复制代码

也就是
  1. Tmatrix = [[1, 5, 9],
  2.            [2, 6, 10],
  3.            [3, 7, 11],
  4.            [4, 8, 12]]
复制代码



  1. Tmatrix = [[row[i] for row in matrix] for i in range(4)]
复制代码

for循环角度理解的话相当于
  1. Tmatrix = []
  2. for i in range(4):
  3.     Tmatrix.append([row[i] for row in matrix])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-10 10:33:19 | 显示全部楼层
笔记:加括号后,列表推导式的执行顺序为:先括号外,再括号内。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 14:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表