一开始一直想不明白,直到……
Topic sourceTraceback (most recent call last): File "<pyshell#27>", line 1, in <module> for t in triangles(): File "<pyshell#18>", line 5, in triangles L = [(L)[i] + (L)[i] for i in range(len(L) + 1)] File "<pyshell#18>", line 5, in <listcomp> L = [(L)[i] + (L)[i] for i in range(len(L) + 1)] IndexError: list index out of range
如果不在表达式中添加0补位的话,会报索引错误,超出范围的。
- 1
小喵biubiu
-- coding: utf-8 --
def triangles():#杨辉三角 L = [1] while True: yield L L = [([0] + L)[i] + (L + [0])[i] for i in range(len(L) + 1)]
#([0]+L)[i]表示[0]+L形成的新list中索引为i的元素.for i in range()是迭代出range的每个元素.
#第二次执行:L=[([0,1])[i]+([1,0])[i] for in range(2)]->L=[(([0,1])[0]+([1,0])[0]),(([0,1])[1]+([1,0])[1])]->L=[(0+1),(1+0)]->L=[1,1]
#第三次执行:L=[(([0,1,1])[0]+([1,1,0])[0]),(([0,1,1])[1]+([1,1,0])[1]),(([0,1,1])[2]+([1,1,0])[2])]->L=[(0+1),(1+1),(1+0)]->L=[1,2,1]
#第四次执行:L=[(([0,1,2,1])[0]+([1,2,1,0])[0]),……,(([0,1,2,1])[3]+([1,2,1,0])[3])]->L=[(0+1),(1+2),(2+1),(1+0)]->L=[1,3,3,1] n = 0 results = [] for t in triangles(): print(t) results.append(t) n = n + 1 if n == 10: break
#结果
#0行,第一次执行:[1]
#1行,第二次执行:[1,1]
#2行,第三次执行:[1,2,1]
#3行,第四次执行:[1,2,3,1]
一开始怎么也弄不清楚L那一长串是怎么计算的,后来一直看前面的基础,最后终于弄明白了,我一直把for...in给理解错了,我一直错误的理解为迭代出的是list……导致一直在list相加,但实际是元素,才茅塞顿开。基础知识还没理解透是很严重的错误。