Discuss / Python / 为啥自己老是没有思路呢QAQ

为啥自己老是没有思路呢QAQ

Topic source

-李铁蛋_

#1 Created at ... [Delete] [Delete and Lock User]
# -*- coding: utf-8 -*-
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 t in triangles():
        print(t)
        n = n+1
        if n == 10:
                break

L.append(0)求大神解释下具体含义

L.append(0)

理解: 1) 利用尾部插入0来控制第一位和最后一位值始终为1; 2) 同时也是为了保证每一行的数值个数正确,因为后面有用到len(L)来确定每次生成L的最终长度。

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

理解: 依次相加,由于最后一位一定为0,即 L[i] == L[-1] == 0,所以 L[0] 与 L[-1] 相加时始终为 L[0] == 1, L[i-1] 与 L[i] 相加时始终为 L[i-1],L[i-1] 为一直以来 L[1] 加上多次的末尾值 0,所以 L[i-1] == L[1] == 1

以上仅为个人理解。。。

-李铁蛋_

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

感谢感谢,看了你的回答才知道原来list.append()里的是list的加法运算。。。一直理解错为在list中添加元素了; 你给的理解完全没有问题,但是对于我这个小白来说还是不能直接明白,于是找了个分解L[i-1]+L[i]的,然后自己演算了一遍就全明白了~

i是根据前一组杨辉三角数据的列表(包含了最后追加进去的0)长度来变化的,而第一行的时候是已经定义好了L = [1],所以第一行是不会使用到while里的列表推导式的,在第一次的循环的时候就被yield返回了。 while的执行分解为简单的步骤:

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

第一次打印出的步骤: #不进行循环 L = [1]

第二次打印的步骤:

while True:
    yield L         
    L = [1, 0]
    length = 2
    for i in [0, 1]:
    new_L.append(L[-1] + L[0]) #第一次循环为1 
    new_L.append(L[0] + L[1])  #第二次循环为1
    L = new_L = [1,1]

第三次打印步骤:

while True:     
    yield L            
    L= [1, 1, 0]
    length = 3
    for i in [0, 1, 2]:
    new_L.append(L[-1] + L[0]) #第一次循环为1
    new_L.append(L[0] + L[1])  #第二次循环为2
    new_L.append(L[1] + L[2])  #第三次循环为1
    L = new_L = [1, 2, 1]

第四次打印步骤:

while True:
    yield L
    L = [1, 2, 1, 0]
    length = 4
    for i in [0, 1, 2, 3]:
    new_L.append(L[-1] + L[0]) #第一次循环为1
    new_L.append(L[0] + L[1])  #第二次循环为3
    new_L.append(L[1] + L[2])  #第三次循环为3
    new_L.append(L[2] + L[3])  #第四次循环为1
    L = new_L = [1, 3, 3, 1]

.... 上面循环的过程其实就是楼上的理解

鹿与陆

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

你这个生成的是一个一个列表么


  • 1

Reply