鱼C论坛

 找回密码
 立即注册
查看: 3165|回复: 1

[已解决]如何把列表推导式转换为循环的形式?

[复制链接]
发表于 2022-11-9 17:19:59 | 显示全部楼层 |阅读模式

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

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

x
在做第24课关于杨辉三角的作业,在网上搜索到一个程序,里面的推导式没有看懂,想转换成循环的形式,没有成功,求助各位老师和大神:
n = [1]
for i in range(10):
        print(*n)
        n.append(0)
        n = [n[k] + n[k-1] for k in range(i+2)]

最后一句推导式没有看懂,于是把它转换为循环的形式:
for k in range(i+2):
                n[k]=n[k] + n[k-1]

但结果不对,各位老师和大神可以帮我看看哪里出错了吗?谢谢
最佳答案
2022-11-9 18:01:25
本帖最后由 jackz007 于 2022-11-9 18:32 编辑

        n 是上一行的列表,列表推导式是根据上一行的列表新产生本行的列表,并直接覆盖上一行的列表 n,由于新列表产生之前,n 是产生新列表的依据,所以,解决问题的关键是,本行的列表必须另起炉灶。等新列表就绪了,再覆盖成上一行的列表 n。
        n = [n[k] + n[k-1] for k in range(i+2)]
        所以,这一行代码应该被分解成
        d = []
        for k in range(i + 2) : d . append(n[k] + n[k - 1])
        n = d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-9 18:01:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-9 18:32 编辑

        n 是上一行的列表,列表推导式是根据上一行的列表新产生本行的列表,并直接覆盖上一行的列表 n,由于新列表产生之前,n 是产生新列表的依据,所以,解决问题的关键是,本行的列表必须另起炉灶。等新列表就绪了,再覆盖成上一行的列表 n。
        n = [n[k] + n[k-1] for k in range(i+2)]
        所以,这一行代码应该被分解成
        d = []
        for k in range(i + 2) : d . append(n[k] + n[k - 1])
        n = d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 17:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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