Discuss / Python / Terser

Terser

Topic source

Terser

#1 Created at ... [Delete] [Delete and Lock User]

精简版:

def PascalsTriangle():
    l = [1]
    while True:
        yield l
        length = len(l)
        ll = [l[i - 1] + l[i] if i > 0 and i < length else 1 for i in range(0, length + 1)]
        l = list(ll)
注意:用l = list(ll)是用list函数生成一个ll的副本给l,因为如果直接用l = ll是让l和ll一样指向同一个列表,在列表生成器中会发生错误。

但是太精简会导致可读性太差,我们来一个可读性强点的版本:

def PascalsTriangle():
    l = [1]
    ll = [1]
    while True:
        yield l
        length = len(l)
        for p in range(1, length):
            ll[p] = l[p - 1] + l[p]
        ll.append(1)
        l = list(ll)

这个版本就可以清楚的看清楚是怎么从上一行得到下一行的。


  • 1

Reply