鱼C论坛

 找回密码
 立即注册
查看: 2079|回复: 8

[已解决]无法理解这句flatten = [col for row in matrix for col in row]

[复制链接]
发表于 2023-4-7 04:03:47 | 显示全部楼层 |阅读模式

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

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

x
救命

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatten = [col for row in matrix for col in row]
我知道应该是先算第一个for  in
for row in matrix:
然后     for col in row:
最后赋值给col成一行

但我就是想不明白是怎么遍历的
for col in row:是列中的行?总觉得照这个式子,先遍历第一列也就是0列,0列然后第一行第二行,最后结果是147258369
最佳答案
2023-4-7 07:42:04
这段代码的含义是将一个二维数组(matrix)压缩成一维数组(flatten),使得数组中的元素按照行的顺序排列,即先将矩阵的第一行的元素加入到结果中,然后是第二行,以此类推,最终得到的是一个长度为9的一维数组。

具体地,这一行代码使用了嵌套的列表推导式。列表推导式是一种简洁的构建列表的方法,可以快速地生成一个列表,而嵌套的列表推导式则可以用来构建多维列表。

在这个嵌套的列表推导式中,第一个for循环是对matrix中的每一行进行遍历,即将每一行提取出来作为row。接下来的for循环是对row中的每一个元素进行遍历,即将row中的每个元素提取出来作为col。最终,将每个col添加到结果列表中。

换句话说,这一行代码等价于下面的代码:
flatten = []
for row in matrix:
    for col in row:
        flatten.append(col)

对于矩阵 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],这个代码的执行顺序是从左到右,从上到下遍历矩阵中的元素。因此,得到的结果是 [1, 2, 3, 4, 5, 6, 7, 8, 9]。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-7 07:42:04 | 显示全部楼层    本楼为最佳答案   
这段代码的含义是将一个二维数组(matrix)压缩成一维数组(flatten),使得数组中的元素按照行的顺序排列,即先将矩阵的第一行的元素加入到结果中,然后是第二行,以此类推,最终得到的是一个长度为9的一维数组。

具体地,这一行代码使用了嵌套的列表推导式。列表推导式是一种简洁的构建列表的方法,可以快速地生成一个列表,而嵌套的列表推导式则可以用来构建多维列表。

在这个嵌套的列表推导式中,第一个for循环是对matrix中的每一行进行遍历,即将每一行提取出来作为row。接下来的for循环是对row中的每一个元素进行遍历,即将row中的每个元素提取出来作为col。最终,将每个col添加到结果列表中。

换句话说,这一行代码等价于下面的代码:
flatten = []
for row in matrix:
    for col in row:
        flatten.append(col)

对于矩阵 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],这个代码的执行顺序是从左到右,从上到下遍历矩阵中的元素。因此,得到的结果是 [1, 2, 3, 4, 5, 6, 7, 8, 9]。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-7 08:48:37 | 显示全部楼层
chatgpt的解释

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-7 08:52:37 | 显示全部楼层

更具体的解释

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-7 22:18:10 | 显示全部楼层
isdkz 发表于 2023-4-7 07:42
这段代码的含义是将一个二维数组(matrix)压缩成一维数组(flatten),使得数组中的元素按照行的顺序排列 ...

谢谢~之前就是对这一点搞不明白,直到看到这句话。
第一个for循环是对matrix中的每一行进行遍历,即将每一行提取出来作为row。接下来的for循环是对row中的每一个元素进行遍历,即将row中的每个元素提取出来作为col。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-7 22:29:42 | 显示全部楼层


谢谢~这么先进的用上chatGPT了
就是本来砍了先提取每一行作为列,然后对列进行遍历转换为行有点明白,看了智能的回答又晕了,我再仔细想想,多谢解释。上面的回复早,我按时间顺序先设为标准答案啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-19 17:57:50 | 显示全部楼层
isdkz 发表于 2023-4-7 07:42
这段代码的含义是将一个二维数组(matrix)压缩成一维数组(flatten),使得数组中的元素按照行的顺序排列 ...

为什么生成了123这些数字,刚学,实在想不通
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-23 13:44:07 | 显示全部楼层

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
Threebody1 -1 -1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-30 00:42:13 | 显示全部楼层
学完派神就不怕 发表于 2023-5-19 17:57
为什么生成了123这些数字,刚学,实在想不通

不行先强行记住把,机器规则既然这样,说明这种格式能得到最后相应的结果而不出差错,照着抄机器能理解执行就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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