如何在python中转换这种类型的for循环

时间:2013-05-24 15:31:59

标签: python loops for-loop

例如JAVA或C ++中的这种for循环:

int N = 20;
for (i = 1; i < N; i = 3 * i + 1)

我将是1,4,13

我只能用它来完成它

while i < N:
    i = 3 * i + 1

如何在python中使用另一种样式编写它?

抱歉我的英文。

3 个答案:

答案 0 :(得分:3)

从Python的角度来看,你的while循环实现没有错。如果你想要一个通用的循环结构来模仿C / C ++ / Java的循环结构,你可以做类似的事情

>>> def loop(init, cond, incr):
    i = init
    while cond(i):
        yield i
        i=incr(i)


>>> list(loop(1, lambda e:e < 20, lambda e:3*e + 1))
[1, 4, 13]

创建循环例程后,您可以根据需要使用它来创建任何自定义循环格式

for i in loop(1, lambda e:e < 20, lambda e:3*e + 1):
    print i

答案 1 :(得分:0)

这是发电机的工作。这样做:

def series(i=1):
    while True:
        yield i
        i = 3 * i + 1

from itertools import takewhile
takewhile(lambda x: x < 20, series())

答案 2 :(得分:0)

这是另一种方法。它比Abhijit的答案更专业。

def timesThreePlusOne(init,limit):
    i = init
    while i < limit:
        yield i
        i = (3 * i) + 1
N = 20
for i in timesThreePlusOne(1,N):
    print i