Python for循环递减索引

BVB*_*VBC 4 python python-3.4

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

for i in range(size):
  if(.....)
    ....
    i-=1
  else:
    ....
Run Code Online (Sandbox Code Playgroud)

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

Dra*_*hix 10

我想通过这里提供的文档再次讨论range()函数:Python 3.4.1范围的文档(start,stop [,step])

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

'start'参数定义何时应该从你的情况'i'的计数器变量开始.'end'参数基本上就是size参数在你的情况下的作用.至于你想要什么,因为你希望每个循环减少变量'i'1,你可以让参数'step'为-1,这表示在for循环的每次迭代中,变量'i'将下降1.

您可以将'step'设置为-2或-4,这将使for循环计数'i'分别在每个增量2减少或减少4减少.

例:

for x in range(9, 3, -3):
    print(x)
Run Code Online (Sandbox Code Playgroud)

打印出来:9,6.它从9开始,到3结束,然后由3的计数器降低.当它达到3时,它将停止,因此为什么'3'本身不打印.

编辑:刚刚注意到你可能想要减少for循环中'i'值的事实......?我会为此做的只是有一个while循环而不是你将有一个暴露的变量,你可以随心所欲地修改.

test = 0
size = 50
while (test < size)
    test += 1
    if (some condition):
        test -= 1
Run Code Online (Sandbox Code Playgroud)


mus*_*_ut 5

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

for <var> in <iterable>只是运行循环体,并<var>iterable. 更改<var>将不会影响随后的迭代。

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

i = 0
while i < size:
    if condition:
        ...
        i -= 1
    else:
        ...
        i += 1
Run Code Online (Sandbox Code Playgroud)