你好我对python比较新!有没有办法在python中使用for循环? 这是我想在python中做的事情的java实现
for (i=1;i<20; i*= 2)
{System.out.println(i);}
在python`中的while循环中的解决方案
while i<20:
print i
i*=2
我无法找到使用for循环执行此操作的方法。显然,使用while循环实现它,但仍然很想知道是否有方法这样做
答案 0 :(得分:3)
有很多方法可以做到这一点,例如
for i in range(5):
i = 2 ** i
print i
或使用发电机
from itertools import count, takewhile
def powers_of_two():
for i in count():
yield 2 ** i
for i in takewhile(lambda x: x < 20, powers_of_two()):
print i
但最终,它取决于您的用例,哪个版本提供最清晰和最多的readbale代码。在大多数情况下,你可能只是使用while循环,因为它很简单并完成工作。
答案 1 :(得分:2)
您认为for
循环与其他语言一样,如C,C ++,Java,JavaScript等。
Python for
循环不同;他们在 iterables 上工作,你总是必须阅读它们:
for element in iterable
代替C&#39; ish
for(start_condition; continue_condition; step_statement)
因此,您需要迭代才能生成您的产品。
我喜欢可读性,所以我的方法就是这样:
for a in (2**i for i in range(20)):
print a
但这主要是有效的,因为我们在数学上知道你的序列的第i个元素将是2**i
。
答案 2 :(得分:1)
在Python中没有真正的方法可以做到这一点。如果你想完全模仿for循环的逻辑,那么手动while循环肯定是要走的路。
否则,在Python中,您将尝试查找生成i
值的生成器或生成器表达式。根据后循环表达式的复杂性,这可能需要实际的功能。
在您的情况下,它有点简单,因为您要查找的数字如下:
1 = 2 ** 0
2 = 2 ** 1
4 = 2 ** 2
8 = 2 ** 3
...
因此,您可以使用生成器表达式(2 ** k for k in range(x))
生成数字。这里的问题是您需要指定一个恰好为x
的值math.floor(math.log2(20)) + 1
(因为您正在查找k
为真的最大数字2 ** k < 20
)
所以完整的表达方式是:
for i in (2 ** k for k in range(math.floor(math.log2(20)) + 1)):
print(i)
...这有点乱,所以如果你不一定需要i
作为那些值,你可以将它移到循环体内:
for k in range(math.floor(math.log2(20)) + 1):
i = 2 ** k
print(i)
但这仍然只适合你的目的。如果你想要一个“真正的”C-for循环表达式,你可以写一个生成器函数:
def classicForLoop (init, stop, step):
i = init
while i < stop:
yield i
i = step(i)
像这样使用:
for i in classicForLoop(1, 20, lambda x: x * 2):
print(i)
当然,你也可以修改生成器函数,将lambdas作为第一个和第二个参数,但它有点简单。
答案 3 :(得分:0)
使用range()函数定义迭代长度。您可以直接使用print()而不是system.out.println
亚历山大提到它并重新迭代
for i in range(1,20):print(i*2)
你也可以在这里考虑while循环 -
i=0
while (i<20):
print(2**i)
i=i+1
记住python中的缩进