Discuss / Python / 还真是想不出大师们这么NB的算法~~自己拿来理解了一遍好了!

还真是想不出大师们这么NB的算法~~自己拿来理解了一遍好了!

Topic source

这是哪位大神总结出来的规律,膜拜!好精简啊。。。

# -*- coding: utf-8 -*-
# 杨辉三角
def triangles():
    L=[1] # ①
    while True:
        yield L 
        L.append(0) # 在list末尾追加一个int0,以便使list的长度+1
        L=[L[i-1]+L[i] for i in range(len(L))]
        # ②[1,0]
        # i=0,取被追加0后list的index(-1)和index(0)的数0和1相加,得到第1个元素1;
        # i=1,取被追加0后list的index(0)和index(1)的数1和0相加,得到第2个元素1;
        # ③[1,1,0]
        # i=0,index(-1)和index(0)的数0和1相加,得到第1个元素1;
        # i=1,index(0)和index(1)的数1和1相加,得到第2个元素2;
        # i=2,index(1)和index(2)的数1和0相加,得到第3个元素1;
        # ④[1,2,1,0]
        # i=0,index(-1)和index(0)的数0和1相加,得到第1个元素1;
        # i=1,index(0)和index(1)的数1和2相加,得到第2个元素3;
        # i=2,index(1)和index(2)的数2和1相加,得到第3个元素3;
        # i=3,index(1)和index(2)的数1和0相加,得到第4个元素1;

def triangles1():
    L1=[1] # ①
    while True:
        yield L1
        for i in range(1,len(L1)):
            L1[i]=pre[i]+pre[i-1]
        L1.append(1)
        pre=L1[:]
        # ②range(1,1)=[],for循环并不执行,单纯追加一个元素1,L1=[1,1]
        # ③range(1,2)=[1],i=1,L1=[1,2]⇒[1,2,1]
        # ④range(1,3)=[1,2],
        #   i=1,L1=[1,3,1]
        #   i=2,L1=[1,3,3]
        #   L1.append(1),L1=[1,3,3,1]

m=int(input('请输入杨辉三角的层数:'))
n=0
for t in triangles():
      print(t)
      n=n+1
      if n==m:
          break

# 对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,
# 就是结束generator的指令,for循环随之结束

0503Stefanie

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

厉害了,在list后面加了一个0,感觉换了一种规律来思考,这样写起来简洁多了


  • 1

Reply