pionrrt 发表于 2023-6-21 23:20:17

提取矩阵对角线的数字问题

想问一下,为什么这两个运行的结果一个是int而另一个是list
matrix = [,
          ,
          ]
for i in range(len(matrix)):
    print(matrix,end="")

type((matrix))

matrix = [,
          ,
          ]
diag=for i in range(len(matrix))]

print(diag)

type(diag)

isdkz 发表于 2023-6-21 23:23:15

这两段代码的运行结果不同,是因为它们的目的和实现方式不同。

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

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

总结一下,第一段代码中, matrix]]获取到的是单个的矩阵对角线元素,它的类型是int ;而第二段代码中, diag是一个包含了多个矩阵对角线元素的列表,它的类型是list 。

歌者文明清理员 发表于 2023-6-21 23:23:40

本帖最后由 歌者文明清理员 于 2023-6-21 23:26 编辑

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

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

我再解释得更详细一些。

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

在第二个代码块中,我们使用了列表推导式 i]] for i in range(len(matrix))] 来创建一个新的列表 diag。在这个列表推导式中,我们仍然使用了 for 循环,但这次用于遍历矩阵中所有的对角线元素,将其添加到新列表 diag 中。因为我们创建的是一个新的列表,所以输出结果是列表类型 list。
页: [1]
查看完整版本: 提取矩阵对角线的数字问题