Python 为什么我的生成器函数总是返回相同的值?

Python 为什么我的生成器函数总是返回相同的值?,python,list,generator,pascals-triangle,Python,List,Generator,Pascals Triangle,我想为伯努利三角形建立一个生成器,三角形中j行中的I数字是帕斯卡三角形j行中第一个I数字的部分和 三角形将如下所示: 在python中,可以通过列表来表示: [[1], [1,2], [1,3,4], [1,4,7,8] 我的生成器函数返回[1]作为第一个输出,这是正确的,但是它始终返回[] 这是我的密码: def next_row(row): n = len(row) new_row = [row[0]] + [row[i] + row[i+1] for i in ran

我想为伯努利三角形建立一个生成器,三角形中
j
行中的
I
数字是帕斯卡三角形
j
行中第一个
I
数字的部分和

三角形将如下所示:

在python中,可以通过列表来表示:

[[1], [1,2], [1,3,4], [1,4,7,8] 
我的生成器函数返回
[1]
作为第一个输出,这是正确的,但是它始终返回
[]

这是我的密码:

def next_row(row):
    n = len(row)
    new_row = [row[0]] + [row[i] + row[i+1] for i in range(n - 1)] + [row[-1]]
    return new_row


def generate_pascal():
    row =[1]
    while True:
        yield row
        row=next_row(row)


def generate_bernoulli():

    row=next(generate_pascal())
    n=len(row)
    while True:
        yield row
        row=[row[0]+sum(row[0:i]) for i in range(n-1)]

首先,您只调用了一次
next
,而不是每次迭代都调用它。其次,在每次迭代中都不会更新行。此外,您的部分总和和
收益率
被互换。我通过将对
next
的调用放在while循环内部,并在其外部初始化
pascal
生成器来修复这些问题。最后,你的总数少了一点;我也解决了这个问题。正确的代码如下:

def generate_bernoulli():
    pascal = generate_pascal()
    while True:
        row=next(pascal)
        n=len(row)
        row=[sum(row[0:i+1]) for i in range(n)]
        yield row

你需要计算帕斯卡三角形行的部分和。下面是我如何编写代码的

def partial_sums(xs):
    s = 0
    for x in xs:
        s += x
        yield s

def generate_bernoulli():
    for row in generate_pascal():
        yield list(partial_sums(row))

你一直在说什么?你到底想要什么?你从不在
generate\u bernoulli
中更新
n
。你也只调用
generate\u pascal
一次。你想达到什么目的呢?
pascal
标记是用于pascal语言的,而不是pascal三角形。使用前请阅读标签摘录。