Min*_*ghe 0 python loops increment range
我想编写一个 for 循环,它将为每个循环迭代 2 的幂。
例如,我想要一个这样的范围:
2, 4, 8, 16, ... , 1024
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
您可以使用生成器表达式,以便它根据需要生成数字并且它们不会浪费内存:
>>> 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)
但这变得很愚蠢(并且不太可读)。