Discuss / Python / 不造理解的对不对

不造理解的对不对

Topic source

vv阿甘vv

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

个人很迷惑,怎么也想不出来怎么写,看了下面同学们的回复,又在网上查询相关解释,现将个人理解写下来

输出杨辉三角如下:

[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]

代码实现如下


def triangles():
    L = [1]
    while True:
        yield L
        L.append(0)
        L = [L[i-1] + L[i] for i in range(len(L))]

n = 0
for m in triangles():
    print(m)
    n = n + 1
    if n == 10:
        break

解释下

L = [1]  # 定义一个只有一个值得list
yield L # 遇到yield就返回L ,此时返回第一行 [1]
L.append(0) # 给L添加个元素0,此时L = [1,0]
此时 L 里面有两个元素,len(L) = 2,range(len(L)) = range(2) = [0,1]
L = [L[i-1] + L[i] for i in range(len(L))]
  = [L[-1] + L[0],L[0] + L[1]]
  = [0 + 1, 1 + 0]
  = [1, 1]

### 此时yield 返回第二行 [1,1]

接下来看第三行

# 首先 L.append(0), L = [1, 1, 0]
# 那么 len(L) = 3, range(len(L)) = [0, 1, 2]

L = [L[i-1] + L[i] for i in range(len(L))]
  = [L[-1] + L[0], L[0] + L[1], L[1] + L[2]]
  = [0 + 1, 1 + 1, 1 + 0]
  = [1, 2, 1]
# 此时yield返回第三行 [1, 2, 1]

接下来第四行

# 首先L.append(0), 则L = [1, 2, 1, 0]
# 那么 len(L) = 4, range(len(L)) = [0, 1, 2, 3]

L = [L[i-1] + L[i] for i in range(len(L))]
  = [L[-1] + L[0], L[0] + L[1], L[1] + [2], L[2] + L[3]]
  = [0 + 1, 1 + 2, 2 + 1, 1 + 0]
  = [1, 3, 3, 1]

下面太多了,以此类推好了

不造理解的对不对,想到这么写的人太厉害了

张楚王

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

好牛逼的算法,那个L.append(0)太神奇了。

抬头风起

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

这个往后面添加一个零我怎么都想不到,太厉害了,学习了

邓天净

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

aa

邓天净

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

有个地方不太理解。请问为什么L[-1]=0,L[0]=1,L[1]=0等等等等,这些是怎么算出来的或是实现的呢?

给大神跪下了!膜拜!

SHUerHan

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

这个算法好精髓

0yzpily0_761

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

这是谁想出来的啊,太厉害了吧,后面添一个0


  • 1

Reply