【坚持】Selenium+Python学习之从读懂代码开始 DAY4

2018/05/21

[生成器详解:廖雪峰的官方网站](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000

#No.1
杨辉三角-一个比较好理解的版本
def triangles():
    b = [1]
    while True:
        yield b
        b = [1] + [b[i] + b[i+1] for i in range(len(b)-1)] + [1]
n = 0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

知乎上一个比较好的解释:
作者:知乎用户
[链接:](https://www.zhihu.com/question/39256042/answer/94845655
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

b = [1] + [b[i] + b[i+1] for i in range(len(b)-1)] + [1]

左右两边的[1]不解释了。我们看这个↓[b[i] + b[i+1] for i in range(len(b)-1)]

No.1
b = [1], len(b) => 1, 
range(len(b)-1) => None 所以是空的,
加上前后的[1],b变成了[1,1]

No.2
b = [1,1], len(b) => 2, 
range(len(b)-1) => range(1) => (0) 
=> 中间的列表生成了b[0] + b[1]这个元素,
其中b[0]是b列表的第一个元素即1,b[1]是b列表的第二个元素即1,
所以生成元素为1+1=2,由于range(1)=>(0),
只有一个元素,生成的list为[2],加上左右的[1],得到[1,2,1]

No.3
b = [1,2,1], len(b) => 3, 
range(len(b)-1) => range(2) 
=> (0,1) => 中间的列表先生成了b[0] + b[1]这个元素,
其中b[0]是b列表的第一个元素即1,b[1]是b列表的第二个元素即2,
所以生成元素为1+2=3,列表然后生成了b[1] + b[2]这个元素,
其中b[1]是b列表的第二个元素即2,b[2]是b列表的第三个元素即1,
所以生成元素为2+1=3,
由于range(2)生成的是长度为2的元组,for完成了0和1两次循环后结束了,
所以生成的list为[3,3],加上左右的[1],得到[1,3,3,1]
resut:
[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]

猜你喜欢

转载自www.cnblogs.com/flyin9/p/9065595.html