gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:54:41 24 4
gpt4 key购买 nike

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

三角形看起来像这样:

enter image description here

这将在 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,而不是每次迭代都调用它。其次,您从未在每次迭代中更新行。此外,您的部分金额和 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

关于python - 为什么我的生成器函数总是返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com