【问题标题】:Python loop with range step multiplied by two [duplicate]范围步长乘以二的Python循环[重复]
【发布时间】:2020-07-08 04:29:55
【问题描述】:

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

for( int index = 2; index < size*2; index *= 2 ) // 2, 4, 8, 16, 32, 64, ...
{
  System.out.print(index + " ");
}

我想在 Python 循环中做同样的事情,但我被困在如何让 range 函数像这样工作。但我被困在如何让步长乘以 2,因为

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)

【问题讨论】:

  • 1.为什么不尝试简单地转换索引变量? i = 2**index? 2.您也可以自己维护变量并使用while循环。
  • range 不能那样工作。它总是给你一个预定义的startstopstep的范围,它们都必须是整数

标签: python range


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    这是一种方法:

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

    输出:

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

    【讨论】:

    • op 只想像 java 一样实现 for 循环
    【解决方案3】:

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

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

    我觉得这更优雅一些,因为您不必担心记住具有i&lt;size*2 的条件,因为乘法与迭代数字 1 -> 大小是分开的。

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

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

    【讨论】:

      【解决方案4】:

      您可以改用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-28
        • 1970-01-01
        相关资源
        最近更新 更多