Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python For循环在2的幂上迭代_Python_Loops_Range_Increment - Fatal编程技术网

Python For循环在2的幂上迭代

Python For循环在2的幂上迭代,python,loops,range,increment,Python,Loops,Range,Increment,我想写一个for循环,对每个循环迭代2的幂 例如,我想要这样的范围: 2, 4, 8, 16, ... , 1024 from math import log import sys for i in map(lambda v : pow(2,v), range(0,int(log(sys.maxint, 2)))): print i 我如何才能做到这一点?您需要创建自己的函数: def doubling_range(start, stop): while start <

我想写一个for循环,对每个循环迭代2的幂

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

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

我如何才能做到这一点?

您需要创建自己的函数:

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

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

根据您的示例,公式可以是:

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

ii = 2
while ii <= 1024: 
    print(ii)
    ii = ii*2
ii=2
而ii<代码>计数器=2

计数器您不需要自己的函数,只需使用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,如下所示:

2, 4, 8, 16, ... , 1024
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
您可以使用,这样它可以根据需要生成数字,并且不会浪费内存:

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

2
4
8
16
32
64
128
256
512
1024
在Python2中,您可以使用
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)
来自itertools导入计数,takewhile

在takewhile中的x(lambda x:x关于如何在web上实现这一点,有很多很好的信息。从python的基础知识开始。我向你保证,如果你只是阅读一些关于python的文档/教程,你会偶然发现一些循环,以及如何做到这一点。你是否尝试过使用Google,或者阅读教科书,或者任何你自己的东西?我也可以询问“2,4,8,16”是一个2的倍数范围,或者为什么这里没有代码或研究工作……谷歌搜索“迭代2的幂”这是第一个结果。然后,谷歌上的其他链接实际上更糟糕。smh是一个合理的问题。请解释你的代码是什么,以及为什么它会解决问题。一个只包含代码的答案(即使它工作正常)通常不会帮助OP理解他们的问题。@SuperBiasedMan这里没有什么要解释的。这不是一个直截了当的答案吗?这不是很复杂,但OP显然不理解,如果他们需要问这个问题。一个解释会让这个答案更好。@Vishal这个问题也很直截了当,所以我假设它仍然是需要的,假设我们认为这个问题是有效的,抱歉,但是我想不出什么方法来回答基本上“我怎么把两个数字加在一起”。(
start@TigerhawkT3:很抱歉,你发现这没有什么帮助;是的,问题是基本的,他们可能会把
for
循环与
for
循环混淆,而不是使用
while
循环。我希望你能独立于问题的质量来判断答案,但无论如何,这是我所做的。正如我所说,答案就是这样的在我看来,一个问题是没有帮助的——甚至对OP也没有帮助,OP明天可能会回来收集代码,而不会学到任何东西。这与答案的不同之处在于,你的范围达到了极限的平方根,而我的答案也达到了极限本身。这是另一个用例。OP没有指定他们是否希望范围达到2**N(你的方法)或最多K(我的方法)。如果在Python 3上运行,这与AndrewSmiley发布的内容完全相同。@MartijnPieters其他答案都没有使用生成器表达式,这就是我要说明的。它简单有效,但并不比使用生成器更有效;我的答案不需要您计算所需的最终值的平方根ver.@MartijnPieters是的,它不是更有效,但更简单。它不是平方根,而是对数。是的,如果你想直接进入停止点,它会变得非常复杂。是的,我指的是log2。因为你使用了
print
,你似乎在使用Python 2。使用
range()
map())
在Python2上意味着您首先生成列表。
range()
生成一个包含从0到地板(平方根(N))的所有整数的列表,然后
map()
生成另一个整数列表,每个整数都是二的幂。只有在Python3中,您才对这些数字进行迭代。只有在Python3中,您才能执行
range()
map()
根据需要生成数字。