Discuss / Python / 加[0]增加列表的元素数很精彩

加[0]增加列表的元素数很精彩

Topic source

我原本把焦点放在第i组的第j个元素怎么计算上,废了很大的功夫也没有进展,楼上+[0]扩充列表给了我思路,他的方法是:第n组的列表前后+[0],这样得到一个长度为i+2的列表,这个列表的相邻两个元素相加就是第i+1组列表的元素,这个方法也跟贴合杨辉三角的描述:每个数等于它上方两数之和。他的代码实现也是很漂亮的,不过作为新手的我写不出来这样的代码,拆分开来写需要一个空列表扩展i+1次。

由他启发想到一种计算方法,把第i组列表分表前后+[0],这样会形成2个长度为i+1的列表,这两个列表对应的元素相机即可。例如[1, 2, 1]前后分别+[0]为[0, 1, 2, 1]和[1, 2, 1, 0],这两个列表相加即为[1, 3, 3, 1]。

代码如下:

def triangles():
    t = [1]
    while True:
        yield t
        s = [0] + t
        t = t + [0]
        for i in range(len(s)):
            t[i] = s[i] + t[i]

厉害,讲得非常透彻,适合我这种小白研究

VincyChan4231

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

非常好非常好,画个图,就能看明白了。

最后一行的t[i]=s[i]+t[i]只管前len(s)个,第一个肯定是0+1,最后肯定是1+0

#第y层的x个数可以用递归得出来

def t(y,x):

    # 左边右边为1

    if x <= 1 or x == y:

        return 1

    return t(y-1,x)+t(y-1,x-1)

## 厉害 易理解

```

n=1      1

n=2    [0,1] [1,0]   1,1

n=3      [0,1,1] [1,1,0]  1,2,1

n = m    [0,m-1] [m-1,0]   [0,m-1]+[m-1,0]

```

赞!!

蘭__吾凡

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

厉害啦


  • 1

Reply