Discuss / Python / 在generator内部通过控制n来终止循环好像不太行

在generator内部通过控制n来终止循环好像不太行

Topic source

13个望辰

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

原方案:

def triangles(max):
    n=0
    L=[1]
    while True:
        yield L
        L1=L+[0]
        L2=[0]+L
        L=[L1[i]+L2[i] for i in range(len(L1))]
        if n==max:
            break
    n=n+1
    return 

通过以下代码调用:

for L in triangles(10):
    print(L)

无法正常终止循环。

13个望辰

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

将generator内部的终止代码删去后,使用liao提供的调用代码中包含的终止代码,成功停止。

def triangles():
    L=[1]
    while True:
        yield L
        L1=L+[0]
        L2=[0]+L
        L=[L1[i]+L2[i] for i in range(len(L1))]
    return 

请问一下 

L1=L+[0]
L2=[0]+L
这里是什么意思 有点绕进去了
L1是前一行 L2是后一行的意思吗?

陈卫坚-

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

1)你代码无法终止循环的原因是因为n = n +1没有放进去while 循环里面。

2)L1和L2使用[0]将两个列表错开了再相加,这个数据理解可以的。

def triangle():

    L = [1]

    while True:

        L1 = L + [0]

        L2 = [0] + L

        L = [L1[i] + L2[i] for i in range(len(L1))]

        yield L

if __name__ == '__main__':

    for i in triangle():

        print (i)

        if len(i) > 10:

            break

def triangles(max):

    n=0

    L=[1]

    while True:

        yield L

        L1=L+[0]

        L2=[0]+L

        L=[L1[i]+L2[i] for i in range(len(L1))]

        n=n+1

        if n==max:

            break

    return 

这样就能正常终止循环了

13个望辰

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

原来是n=n+1放错位置了

_Silver1ining

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

这个思路,牛!!


  • 1

Reply