for循环遍历2的幂

时间:2015-08-07 08:10:52

标签: python loops range increment

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

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

2, 4, 8, 16, ... , 1024

我怎么能这样做?

5 个答案:

答案 0 :(得分:3)

您需要创建自己的功能:

def doubling_range(start, stop):
    while start < stop:
        yield start
        start <<= 1

这使用左移操作;如果您发现更清楚,也可以使用start *= 2

演示:

>>> def doubling_range(start, stop):
...     while start < stop:
...         yield start
...         start <<= 1
... 
>>> for i in doubling_range(2, 1025):
...     print i
... 
2
4
8
16
32
64
128
256
512
1024

答案 1 :(得分:2)

您可以使用generator expression,以便根据需要生成数字,并且不会浪费内存:

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

2
4
8
16
32
64
128
256
512
1024

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

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

from itertools import count
for x in (2**p for p in count(1)):
    if x > 1024:
        break
    print(x)

你可以把它全部放在一行:

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

但那变得愚蠢(而且不太可读)。

答案 2 :(得分:1)

你说你想为每个循环迭代2的幂,

看到你的例子,配方可能是:

制作一个循环,将初始值乘以2,直到达到1024。

ii = 2
while ii <= 1024: 
    print ii
    ii = ii*2

答案 3 :(得分:0)

counter = 2

while counter <= 1024:
    print counter
    counter *= 2

答案 4 :(得分:-1)

你不需要自己的功能,只需使用lambda

import sys
from math import log
for i in map(lambda v : pow(2,v), range(0,log(1024, 2))):
    print i

输出看起来像

1
2
4
8
16
32
64
128
256
512
1024

如果你知道你需要去2的力量。如果你不这样做,你可以去最大的可存储int,如下所示:

from math import log
import sys
for i in map(lambda v : pow(2,v), range(0,int(log(sys.maxint, 2)))):
    print i

输出看起来像

1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
4294967296
8589934592
17179869184
34359738368
68719476736
137438953472
274877906944
549755813888
1099511627776
2199023255552
4398046511104
8796093022208
17592186044416
35184372088832
70368744177664
140737488355328
281474976710656
562949953421312
1125899906842624
2251799813685248
4503599627370496
9007199254740992
18014398509481984
36028797018963968
72057594037927936
144115188075855872
288230376151711744
576460752303423488
1152921504606846976
2305843009213693952
4611686018427387904