Python for循环递减索引

12

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

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

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


不要使用 i,因为当你尝试减少 i 时,range() 会增加它,导致程序永远运行下去。 - ForceBru
如果您想得到建设性的帮助,请发一些真正的Python代码而不是一些伪代码。 - kasper Taeymans
1
@ForceBru,这不是range()的工作方式。range()仅仅创建一个列表,而for <var> in <iterable>结构运行循环,将<var>分配给<iterable>中的每个值。如果在循环内部更改<var>,它对下一次迭代没有影响。 - musically_ut
@SH.C: 你好。欢迎来到Stack Overflow。你发布的问题有些不够明确(这可能解释了为什么会被踩)。我们需要更多关于你想要做什么的信息。如果你不一定要使用“for”循环,那么似乎while循环更适合你的用例。 - musically_ut
1
@musically_ut:对于混淆感到抱歉,这是我第一次使用这个网站。我想我已经得到了答案。你是对的,我应该使用while循环而不是for循环。 - BVBC
5个回答

17

我想再次通过此处提供的文档:Python 3.4.1 range(start, stop[, step]) 函数文档,来更详细地介绍 range() 函数。

如上述文档所示,您可以为 range() 函数输入三个参数:'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”本身不会被打印。

编辑:刚刚注意到似乎您想在for循环中减少“i”值…?那么我会用while循环代替,在其中暴露一个可以随意修改的变量。

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

6
对于这样的结构,如果你需要变化循环索引,for循环可能不是最好的选择。 for <var> in <iterable> 仅使用 <var>iterable 中获取每个可用值运行循环体。改变 <var> 不会影响随后的迭代。
然而,由于通常很难事先确定序列中的值 i,因此可以使用while 循环
i = 0
while i < size:
    if condition:
        ...
        i -= 1
    else:
        ...
        i += 1

0

在for循环中使用递减运算符的方法是

for i in range(5,1,-1): print(i)

它将递减一个单位并打印出5432

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

0

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

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


0
你不应该改变i的值。 for 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)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接