为啥自己老是没有思路呢QAQ
Topic sourceL.append(0)
理解: 1) 利用尾部插入0来控制第一位和最后一位值始终为1; 2) 同时也是为了保证每一行的数值个数正确,因为后面有用到len(L)来确定每次生成L的最终长度。
L = [L[i - 1] + L[i] for i in range(len(L))]
理解: 依次相加,由于最后一位一定为0,即 L[i] == L[-1] == 0,所以 L[0] 与 L[-1] 相加时始终为 L[0] == 1, L[i-1] 与 L[i] 相加时始终为 L[i-1],L[i-1] 为一直以来 L[1] 加上多次的末尾值 0,所以 L[i-1] == L[1] == 1
以上仅为个人理解。。。
感谢感谢,看了你的回答才知道原来list.append()里的是list的加法运算。。。一直理解错为在list中添加元素了; 你给的理解完全没有问题,但是对于我这个小白来说还是不能直接明白,于是找了个分解L[i-1]+L[i]的,然后自己演算了一遍就全明白了~
i是根据前一组杨辉三角数据的列表(包含了最后追加进去的0)长度来变化的,而第一行的时候是已经定义好了L = [1],所以第一行是不会使用到while里的列表推导式的,在第一次的循环的时候就被yield返回了。 while的执行分解为简单的步骤:
while True:
yield L
L.append(0)
length = len(L)
new_L = []
for i in range(length):
new_L.append(L[i-1]+L[i])
L = new_L
第一次打印出的步骤: #不进行循环 L = [1]
第二次打印的步骤:
while True:
yield L
L = [1, 0]
length = 2
for i in [0, 1]:
new_L.append(L[-1] + L[0]) #第一次循环为1
new_L.append(L[0] + L[1]) #第二次循环为1
L = new_L = [1,1]
第三次打印步骤:
while True:
yield L
L= [1, 1, 0]
length = 3
for i in [0, 1, 2]:
new_L.append(L[-1] + L[0]) #第一次循环为1
new_L.append(L[0] + L[1]) #第二次循环为2
new_L.append(L[1] + L[2]) #第三次循环为1
L = new_L = [1, 2, 1]
第四次打印步骤:
while True:
yield L
L = [1, 2, 1, 0]
length = 4
for i in [0, 1, 2, 3]:
new_L.append(L[-1] + L[0]) #第一次循环为1
new_L.append(L[0] + L[1]) #第二次循环为3
new_L.append(L[1] + L[2]) #第三次循环为3
new_L.append(L[2] + L[3]) #第四次循环为1
L = new_L = [1, 3, 3, 1]
.... 上面循环的过程其实就是楼上的理解
- 1
-李铁蛋_
L.append(0)求大神解释下具体含义