为什么我的发电机函数总是返回相同的值?

2024-04-20 00:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为Bernoulli三角形建立一个生成器,三角形中j线上的i是第j行中pascal三角形中第一个i数的部分和。在

三角形如下:

enter image description here

在python中用列表表示:

[[1], [1,2], [1,3,4], [1,4,7,8] 

我的generator函数返回[1]作为第一个输出,这是正确的,但是它总是返回[]!在

这是我的准则:

^{pr2}$

Tags: 函数列表generatorpascalbernoulli三角形准则pr2
2条回答

首先,只调用next一次,而不是每次迭代都调用它。第二,每次迭代都不会更新行。此外,您的部分和与yield是互换的。我通过将对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))

相关问题 更多 >