python 生成具有特定条件的无限列表
python generate a infinite list with certain condition
我知道 python 中有发电机产量,例如:
def f(n):
x = n
while True:
yield x
x = x+1
所以我尝试在不使用迭代的情况下将此 haskell 函数转换为 python:Haskell infinite recursion in list comprehension
我不确定如何在 python 中定义基本情况,也不确定如何将 if 语句与此 yield 人员结合使用!这是我尝试做的事情:
def orbit(x,y):
while True:
yield p (u,v)
p (u,v) = (u^2 - v^2 + x, 2 * u * v + y)
我看不出你从哪里得到 p
。据我所知,你几乎可以从字面上翻译它 Haskell:
def orbit(x, y):
u, v = 0, 0
while True:
u, v = u**2 − v**2 + x, 2*u*v + y
yield u, v
在他们的例子中,调用函数为orbit(1, 2)
,u
将在第一轮绑定到1
,v
绑定到2
,然后产生 ((1, 2)
) 。在下一次迭代中,u = 1**2 - 2**2 + 1 = 1 - 4 + 1 = -2
和 v = 2*1*2 + 2 = 6
.
我知道 python 中有发电机产量,例如:
def f(n):
x = n
while True:
yield x
x = x+1
所以我尝试在不使用迭代的情况下将此 haskell 函数转换为 python:Haskell infinite recursion in list comprehension
我不确定如何在 python 中定义基本情况,也不确定如何将 if 语句与此 yield 人员结合使用!这是我尝试做的事情:
def orbit(x,y):
while True:
yield p (u,v)
p (u,v) = (u^2 - v^2 + x, 2 * u * v + y)
我看不出你从哪里得到 p
。据我所知,你几乎可以从字面上翻译它 Haskell:
def orbit(x, y):
u, v = 0, 0
while True:
u, v = u**2 − v**2 + x, 2*u*v + y
yield u, v
在他们的例子中,调用函数为orbit(1, 2)
,u
将在第一轮绑定到1
,v
绑定到2
,然后产生 ((1, 2)
) 。在下一次迭代中,u = 1**2 - 2**2 + 1 = 1 - 4 + 1 = -2
和 v = 2*1*2 + 2 = 6
.