为了账号安全,请及时绑定邮箱和手机立即绑定

范围步长乘以 2 的 Python 循环

范围步长乘以 2 的 Python 循环

慕村9548890 2023-02-22 17:21:28
简单地说,我在 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)
查看完整描述

4 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

这是一种方法:

print(', '.join([str(2**i) for i in range(1, 10)]))

输出:

2, 4, 8, 16, 32, 64, 128, 256, 512


查看完整回答
反对 回复 2023-02-22
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

在 python 中没有真正的等价物,而for i=1; i<x; i++不必分解为使用 while 循环。话虽如此,我认为如果将范围与 python 的生成器理解结合使用,您会发现使用范围会非常灵活。

for index in (i*2 for i in range(1,size)):
    print(index)

我觉得这有点更优雅,因为你不需要担心记住有一个条件,i<size*2因为乘法与迭代数字 1 -> size 是分开的。

我在这里建议使用生成器,因为它最接近您想要在 Java 中实现的精神,而无需诉诸 while 循环,涉及列表理解的解决方案将首先为您的整个范围创建一个数字列表,然后迭代该列表,在我看来,这与您试图模仿的不同。我希望这有帮助!

编辑:关于生成器表达式的文档,以防您不熟悉https://docs.python.org/3/reference/expressions.html#generator-expressions


查看完整回答
反对 回复 2023-02-22
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您可以改用 while 循环:


size = 129

index = 2


while index < size:

    print(index)

    index *= 2

或者你可以走得更远,定义一个生成器来更容易地做到这一点:


def powerloop(mn,mx,step):

    while mn < mx:

        yield mn

        mn *= step


for i in powerloop(2, 129, 2):

    print(i)

输出:


2

4

8

16

32

64

128


查看完整回答
反对 回复 2023-02-22
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

terms=10

result = list(map(lambda x: 2 ** x, range(terms)))


for i in range(2,terms):

   print(result[i])

输出


4

8

16

32

64

128

256

512


查看完整回答
反对 回复 2023-02-22
  • 4 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信