Python for循环递减索引

时间:2015-02-21 19:12:37

标签: python python-3.4

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

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

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

5 个答案:

答案 0 :(得分:10)

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

如上面的文档中所示,您可以为范围功能'开始','停止'和'步骤'输入三个参数,并在结束它会给你一个不可变序列

'开始'参数定义了你的案例的计数器变量' i'应该从。 '结束'参数基本上就是size参数在你的情况下的作用。至于你想要什么,因为你希望减少变量' i'每循环1次,你可以得到参数' step'为-1表示在for循环的每次迭代中,变量' i'将下降1。

您可以设置'步骤'也是-2或-4,这将使for循环计数' i'每次增量减少2次或者4次减少。

示例:

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

打印出来:9,6。从9开始,到3结束,用3的计数器降低。当它达到3时,它将停止,因此为什么' 3'本身没有印刷。

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

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

答案 1 :(得分:2)

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

for <var> in <iterable>仅使用<var>运行循环体,从iterable获取每个值。更改<var>将不会影响随后的迭代。

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

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

答案 2 :(得分:0)

你不应该改变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)]

答案 3 :(得分:0)

您可以在range

找到更多示例

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

答案 4 :(得分:0)

for循环中的减量运算符为

对于范围在(5,1,-1)中的i:    打印(i)

它将减少一幅印刷品5432

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