For loop iterate over powers of 2

前端 未结 5 799
醉话见心
醉话见心 2021-01-28 16:55

I want to write a for loop that will iterate over the powers of 2 for each loop.

For example I would want a range like this:

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


        
5条回答
  •  孤街浪徒
    2021-01-28 17:48

    You don't need your own function for this one, just use a lambda

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

    output looks like

    1
    2
    4
    8
    16
    32
    64
    128
    256
    512
    1024
    

    If you know what power of 2 you need to go to. If you don't, you could just go up to the largest storable int, like this:

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

    Output looks like

    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
    

提交回复
热议问题