鱼C论坛

 找回密码
 立即注册
查看: 1630|回复: 2

[已解决]提取矩阵对角线的数字问题

[复制链接]
发表于 2023-6-21 23:20:17 | 显示全部楼层 |阅读模式

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

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

x
想问一下,为什么这两个运行的结果一个是int而另一个是list
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
for i in range(len(matrix)):
    print(matrix[i][i],end="  ")

type((matrix[i][i]))
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
diag=[matrix[i][i]for i in range(len(matrix))]

print(diag)

type(diag)
截图未命名.jpg
最佳答案
2023-6-21 23:23:15
[b]这两段代码的运行结果不同,是因为它们的目的和实现方式不同。

第一段代码, type((matrix[i][i]))  这部分主要是打印出矩阵对角线的每一个元素。在  for  循环中,每次  i  变化时, matrix[i][i]  就会获取到矩阵对角线上的一个元素,并打印出来。这个元素的类型是  int ,因为在你的例子中,矩阵的元素都是整数。所以  type((matrix[i][i]))  的结果是  <class 'int'> 。

第二段代码, diag=[matrix[i][i]for i in range(len(matrix))]  则是创建一个新的列表  diag ,这个列表包含了矩阵对角线上的所有元素。在这个列表推导式中, for i in range(len(matrix))  是循环变量, matrix[i][i]  则是在每次循环中,从矩阵对角线上获取元素。所以  diag  是一个包含了多个元素的列表,这些元素都是矩阵对角线上的数。因此, type(diag)  的结果是  <class 'list'> 。

总结一下,第一段代码中, matrix[i][i]  获取到的是单个的矩阵对角线元素,它的类型是  int ;而第二段代码中, diag  是一个包含了多个矩阵对角线元素的列表,它的类型是  list 。[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-21 23:23:15 | 显示全部楼层    本楼为最佳答案   
[b]这两段代码的运行结果不同,是因为它们的目的和实现方式不同。

第一段代码, type((matrix[i][i]))  这部分主要是打印出矩阵对角线的每一个元素。在  for  循环中,每次  i  变化时, matrix[i][i]  就会获取到矩阵对角线上的一个元素,并打印出来。这个元素的类型是  int ,因为在你的例子中,矩阵的元素都是整数。所以  type((matrix[i][i]))  的结果是  <class 'int'> 。

第二段代码, diag=[matrix[i][i]for i in range(len(matrix))]  则是创建一个新的列表  diag ,这个列表包含了矩阵对角线上的所有元素。在这个列表推导式中, for i in range(len(matrix))  是循环变量, matrix[i][i]  则是在每次循环中,从矩阵对角线上获取元素。所以  diag  是一个包含了多个元素的列表,这些元素都是矩阵对角线上的数。因此, type(diag)  的结果是  <class 'list'> 。

总结一下,第一段代码中, matrix[i][i]  获取到的是单个的矩阵对角线元素,它的类型是  int ;而第二段代码中, diag  是一个包含了多个矩阵对角线元素的列表,它的类型是  list 。[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-21 23:23:40 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-6-21 23:26 编辑

[b]这是因为第一个代码块中,循环内的语句 matrix[i][i] 取出的是二维列表 matrix 的对角线上的元素,对角线上的元素是整型,所以输出的结果也是整型 int。

而第二个代码块中,通过列表推导式 [matrix[i][i] for i in range(len(matrix))],将二维列表 matrix 对角线上的元素提取出来,用于构建一个新的一维列表 diag,那么 diag 就是一个列表,所以输出结果是列表类型 list。

我再解释得更详细一些。

在第一个代码块中,我们使用 for 循环处理二维列表 matrix 中的每一行,取出对角线上的元素,代码 matrix[i][i] 意味着我们选取的是矩阵 matrix 中第 i 行和第 i 列相等的元素,因此我们在打印时会输出对角线上的元素。由于我们取出的每个元素都是整数,因此 type(matrix[i][i]) 输出 int。

在第二个代码块中,我们使用了列表推导式 [matrix[i][i] for i in range(len(matrix))] 来创建一个新的列表 diag。在这个列表推导式中,我们仍然使用了 for 循环,但这次用于遍历矩阵中所有的对角线元素,将其添加到新列表 diag 中。因为我们创建的是一个新的列表,所以输出结果是列表类型 list。
[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 17:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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