Python for循环递减索引

Python for loop decrementing index

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

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

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

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

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

的示例

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

我想通过此处提供的文档再次检查 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。

您也可以将 'step' 设置为 -2 或 -4,这将使 for 循环计数 'i' 在每次递增时分别递减 2 或 4。

示例:

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

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

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

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

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

for循环中的自减运算符是

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

它会减去一次打印 5432

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