For 循环迭代 2 的幂

Min*_*ghe 0 python loops increment range

我想编写一个 for 循环,它将为每个循环迭代 2 的幂。

例如,我想要一个这样的范围:

2, 4, 8, 16, ... , 1024
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

end*_*ith 5

您可以使用生成器表达式,以便它根据需要生成数字并且它们不会浪费内存:

>>> for x in (2**p for p in range(1, 11)):
...    print(x)

2
4
8
16
32
64
128
256
512
1024
Run Code Online (Sandbox Code Playgroud)

在 Python 2 中,您可以使用xrange而不是将range其保留为生成器并避免创建不必要的列表。

如果您想输入实际停止点而不是停止的功率,这可能是最简单的方法:

from itertools import count
for x in (2**p for p in count(1)):
    if x > 1024:
        break
    print(x)
Run Code Online (Sandbox Code Playgroud)

您可以将所有内容放在一行中:

from itertools import count, takewhile
for x in takewhile(lambda x: x <= 1024, (2**p for p in count(1))):
    print(x)
Run Code Online (Sandbox Code Playgroud)

但这变得很愚蠢(并且不太可读)。