Python实现帕斯卡三角出错,求问题排查与修正方案
问题分析与解决
你的核心问题出在列表赋值的引用机制上:temp = lst并不是创建一个新的列表副本,而是让temp和lst指向内存中同一个列表对象。所以当你在循环里修改lst的元素时,temp的内容会同步改变,导致计算下一行元素时,用的是已经被修改过的当前列表值,而非上一行的原始值。
比如第三次循环(生成第三行)时,原本应该基于上一行[1,2,1]计算,但因为temp和lst是同一个对象,当你修改lst[1]为1+2=3后,temp[1]也变成了3,接下来计算lst[2]时,用的是temp[1]+temp[2] = 3+1=4,这就出现了错误的[1,3,4,1]。
修正方案
给temp赋值时,要创建lst的副本,而不是引用。Python里有几种常用的列表复制方式:
temp = lst.copy()temp = lst[:]temp = list(lst)
同时要注意调整赋值顺序,确保每次循环都基于上一行的原始值计算。修正后的代码如下:
length = 4 lst = [1] for i in range(length): temp = lst.copy() # 创建上一行的副本 for j in range(i): lst[j+1] = temp[j] + temp[j+1] lst.append(1) print(lst)
执行结果
运行修正后的代码,就能得到预期的帕斯卡三角:
[1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1]
内容的提问来源于stack exchange,提问作者Imaginary
相关产品推荐
相关产品推荐

