You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表赋值异常疑问:欧拉计划15题代码调试问题

问题根源:Python列表的引用赋值特性

嘿,你遇到的这个问题完全是因为对Python里列表的赋值逻辑理解有偏差,这可是新手常踩的经典坑哦~

为什么原来的lijst = temp会出问题?

在Python中,列表属于可变对象。当你执行lijst = temp的时候,并不是把temp里的元素复制一份给lijst,而是让lijst和temp指向内存中同一个列表对象。打个比方,就像两个人共用一把钥匙,不管谁用这把钥匙开门、改变房间里的东西,另一个人看到的房间也会是改变后的样子。

回到你的代码:
当你在第二个for循环开头执行temp.append(1)时,因为lijst和temp指向同一个列表,所以lijst也会同步被加上这个1。后续计算temp[b] = lijst[b-1] + lijst[b]的时候,用的已经是被修改过的lijst,自然就得不到预期的杨辉三角序列了。

为什么改成列表推导式就正常了?

lijst = [a for a in temp]这种写法,本质是遍历temp中的每一个元素,然后创建一个全新的列表对象,把这些元素复制进去。这时候lijst和temp指向的是两个完全独立的列表,修改其中一个,另一个不会受到任何影响。

除了列表推导式,你还可以用这两种写法实现同样的效果:

  • lijst = temp.copy():调用列表的内置copy方法创建副本
  • lijst = list(temp):通过list构造函数生成新列表

修正后的完整代码

lijst = [1, 1]
temp = [1, 1]
for a in range(2, 21):
    temp.append(1)
    for b in range(1, a):
        temp[b] = lijst[b-1] + lijst[b]
    lijst = [x for x in temp]  # 或者用temp.copy()/list(temp)
    print(a, lijst)

这样运行就能得到你想要的杨辉三角序列啦~

内容的提问来源于stack exchange,提问作者tmfrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:22:24