杨辉三角如下:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
实现一个生成器,不断输出下一行的列表,实现代码如下:
def triangles():
N = [1]
while True:
yield N
N.append(0)
N = [N[i-1] + N[i] for i in range(len(N))]
n = 0
results = []
for t in triangles():
print(t)
results.append(t)
n = n + 1
if n == 5:
break
print(results)
results.append(t)语句里的t和print(t)里的t应该一样呀,为何results中的列表末项会多一个零?
你好,python中所有东西都可以视为对象,希望对你有所帮助
yield N #返回一个列表对象
N.append(0) #对当前对象添加 0 元素
N = [N[i-1] + N[i] for i in range(len(N))] #N变量重新绑定对象
这是由于你使用的是append()方法添加的 0 ,results里的上一个元素和你求下一行时 (N.append(0))的N绑定的对象是同一个,所以会改变;
打印出来的是改变之前的,所以看不出,从results最后一个元素没有加0就可以看出来,那是因为还没有开始求下一行数。
解决办法:
yield N
N = N + [0] #这里重新生成了一个列表对象,用N重新绑定
N = [N[i-1] + N[i] for i in range(len(N))]