之前不知道可以直接加号连接list,学到了
Topic sourceprefect ,最完美最简洁写法
第二层开始相当于
0 1 1 0
\ / \ / \ /
1 2 1
所以楼组在第二层开始list两头补上0,用生成取 当前和当前+1 个list 元素得到生成新list 的元素,
len(L)-1 生成器生成结果list 比两端补0 后的新list的少一个;
我也想写这样没写出来
L = [0] + L + [0]是[0,1,0]
L = [L[i] + L[i + 1] for i in range(len(L) - 1)]计算的时候,总是使用[0,1,0]作为开头和结尾的1的运算(0+1,1+0)
不得不说这个算法牛逼了!
step1:给L赋初值L=[1];
step2:执行L=[0]+L+[0],此时L=[0,1,0];
step3:由上可知,此时len(L)=3,执行L = [L[i] + L[i + 1] for i in range(2)],L=[1,1];
对比step1和step3,step2的作用就是在原来L的值的两端加上[0],进而实现每一个list的两端都为1,这也就是答主说的,用加号可以直接list。
# -*- coding: utf-8 -*-
def triangles():
L = [1]
yield L
while 1:
yield L
L = [0] + L + [0]
L = [L[i] + L[i + 1] for i in range(len(L) - 1)]
按照遇到 yield 就返回,下次再进入到这个地方继续的,在 While 前面加 1 个 yield 第一次调用的时候应该不影响才对,为什么加上一个 yield,第一次 print 打出的是 None 呢???
梁伯伯与祝嬢嬢
这个L=[0]+L+[0]是什么骚操作真的没看懂