def triangles():
L=[1]
while True:
yield L
L.insert(0,0)
L.append(0)
L=[L[i]+L[i+1] for i in range(len(L)-1)]
n = 0
results = []
for t in triangles():
print(t)
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
if results == [
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1],
[1, 8, 28, 56, 70, 56, 28, 8, 1],
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:
print('测试通过!')
else:
print('测试失败!')
代码如上
为什么 将 t 添加到result中 以后 t 的每一行首尾都多了一个 0
刚开始学习python 希望 了解的同志详细解答下
这个咱知道,主要是因为在yield L后又对L进行了原址修改(L.insert(0, 0),L.append(0)),使得生成的t(L)也随之变化,可考虑在生成时做个拷贝,以防止原址修改带来的副作用(side effect)
def triangles():
'''
生成器triangles,每次产出更新后的列表L,列表L的更新规则如下:
前后补0,新列表每项元素为补0后列表相邻元素之和,列表规模变化为n→n+2→n+1
'''
L=[1]
while True:
yield [i for i in L]
L.insert(0,0)
L.append(0)
L=[L[i]+L[i+1] for i in range(len(L)-1)]
这种一般都是问原作者或者原代码创作人,直接解答比较省力....旁人没有这个语境,回答不免有偏薄