猿问

范围步长乘以 2 的 Python 循环

简单地说,我在 Java 中有这个功能:


for( int index = 2; index < size*2; index *= 2 ) // 2, 4, 8, 16, 32, 64, ...

{

  System.out.print(index + " ");

}

我想在 Python 循环中做同样的事情,但我一直在研究如何使范围函数像那样工作。但我坚持如何使步骤乘以二,因为


for index in range(2, size*2, *2):

    print(index)

我已经尝试了所有我能想到的变体:


for index in range(2, size*2, index = index * 2):

    print(index)

for index in range(2, size*2, index * 2):

    print(index)


慕村9548890
浏览 164回答 4
4回答

肥皂起泡泡

这是一种方法:print(',&nbsp;'.join([str(2**i)&nbsp;for&nbsp;i&nbsp;in&nbsp;range(1,&nbsp;10)]))输出:2,&nbsp;4,&nbsp;8,&nbsp;16,&nbsp;32,&nbsp;64,&nbsp;128,&nbsp;256,&nbsp;512

呼啦一阵风

在 python 中没有真正的等价物,而for i=1; i<x; i++不必分解为使用 while 循环。话虽如此,我认为如果将范围与 python 的生成器理解结合使用,您会发现使用范围会非常灵活。for&nbsp;index&nbsp;in&nbsp;(i*2&nbsp;for&nbsp;i&nbsp;in&nbsp;range(1,size)): &nbsp;&nbsp;&nbsp;&nbsp;print(index)我觉得这有点更优雅,因为你不需要担心记住有一个条件,i<size*2因为乘法与迭代数字 1 -> size 是分开的。我在这里建议使用生成器,因为它最接近您想要在 Java 中实现的精神,而无需诉诸 while 循环,涉及列表理解的解决方案将首先为您的整个范围创建一个数字列表,然后迭代该列表,在我看来,这与您试图模仿的不同。我希望这有帮助!编辑:关于生成器表达式的文档,以防您不熟悉https://docs.python.org/3/reference/expressions.html#generator-expressions

一只斗牛犬

您可以改用 while 循环:size = 129index = 2while index < size:&nbsp; &nbsp; print(index)&nbsp; &nbsp; index *= 2或者你可以走得更远,定义一个生成器来更容易地做到这一点:def powerloop(mn,mx,step):&nbsp; &nbsp; while mn < mx:&nbsp; &nbsp; &nbsp; &nbsp; yield mn&nbsp; &nbsp; &nbsp; &nbsp; mn *= stepfor i in powerloop(2, 129, 2):&nbsp; &nbsp; print(i)输出:248163264128

qq_花开花谢_0

terms=10result = list(map(lambda x: 2 ** x, range(terms)))for i in range(2,terms):&nbsp; &nbsp;print(result[i])输出48163264128256512
随时随地看视频慕课网APP

相关分类

Python
我要回答