【问题标题】:Python for loop decrementing indexPython for循环递减索引
【发布时间】:2015-02-21 19:12:37
【问题描述】:

所以我写了一个这样的for循环:

for i in range(size):
  if(.....)
    ....
    i-=1
  else:
    ....

如果索引在if 语句中,我会尝试将索引减1,但显然我不能这样做。有没有其他方法可以在 for 循环中减少 i

【问题讨论】:

  • 不要使用i,否则当您尝试减少irange() 增加它时,它将永远运行。
  • 如果您需要建设性的帮助,请发布一些真正的python代码,而不是一些伪乱码。
  • @ForceBru range() 不是这样工作的。 range() 仅创建一个列表,for <var> in <iterable> 构造运行循环,从 <iterable> 分配 <var> 每个值。如果<var>在循环内被改变,它对下一次迭代没有影响。
  • @SH.C:嗨。欢迎来到 SO。您发布的问题有点未指定(这可以解释否决票)。我们需要更多关于您想要做什么的信息。如果您不习惯使用for 循环,那么似乎while loop 可能更适合您的用例。
  • @musically_ut:很抱歉造成混乱,这是我第一次使用这个网站。我想我已经得到了答案。你说得对,我应该使用 while 循环而不是 for 循环。

标签: python python-3.4


【解决方案1】:

我想通过此处提供的文档再次查看 range() 函数:Python 3.4.1 Documentation for range(start, stop[, step])

如上面的文档所示,你可以为范围函数'start'、'stop'和'step'输入三个参数,最后它会给你一个不可变序列 .

'start' 参数定义了你的案例 'i' 的计数器变量应该从什么时候开始。 'end' 参数本质上是 size 参数在您的情况下所做的。至于你想要什么,因为你希望在每个循环中将变量 'i' 减少 1,你可以将参数 'step' 设置为 -1,这表示在 for 循环的每次迭代中,变量 'i'将下降 1。

您也可以将“步长”设置为 -2 或 -4,这将使 for 循环在每次递增 2 或 4 时分别向下计数“i”。

示例:

for x in range(9, 3, -3):
    print(x)

打印出:9、6。它从 9 开始,在 3 结束,然后递减计数器 3。当它到达 3 时,它将停止,因此为什么不打印“3”本身。

编辑: 刚刚注意到您可能想要减少 for 循环中的“i”值...?然后我会做的只是有一个 while 循环,而不是在其中暴露一个变量,您可以随心所欲地修改它。

test = 0
size = 50
while (test < size)
    test += 1
    if (some condition):
        test -= 1

【讨论】:

    【解决方案2】:

    对于这种需要改变循环索引的构造,for 循环可能不是最佳选择。

    for &lt;var&gt; in &lt;iterable&gt; 仅运行循环体,&lt;var&gt; 获取来自iterable 的每个可用值。更改 &lt;var&gt; 不会对随后的迭代产生影响。

    但是,由于事先计算出i 将采用的值序列通常很棘手,因此您可以使用while loop

    i = 0
    while i < size:
        if condition:
            ...
            i -= 1
        else:
            ...
            i += 1
    

    【讨论】:

      【解决方案3】:

      你不应该改变ifor i in range(size): 有点特别。相反,您可能应该使用列表推导:

      size_range = [x-1 if condition else x for x in range(size)]
      

      实际上可能更好:

      def f(x):
          ... #Do else stuff here.
      
      decrement = lambda x: x-1
      size_range = [decrement(x) if condition else f(x) for x in range(size)]
      

      【讨论】:

        【解决方案4】:

        您可以在这里找到更多关于range的示例

        但您可能想要的是这样的:for i in range(size, 0):

        【讨论】:

          【解决方案5】:

          for循环中的减数运算符是

          对于范围内的 i (5,1,-1): 打印(一)

          它会减少一个打印 5432

               for increment index last parameter should be in positive
               for decrement index last parameter should be in negative 
          

          【讨论】:

            猜你喜欢
            • 2018-03-16
            • 2020-09-09
            • 2013-03-20
            • 1970-01-01
            • 1970-01-01
            • 2014-02-03
            • 1970-01-01
            • 2013-03-19
            • 2013-06-11
            相关资源
            最近更新 更多