所以我写了一个这样的for循环:
for i in range(size):
if(.....)
....
i-=1
else:
....
如果它在if
语句中,我尝试将索引减少1,但显然我不能这样做。还有其他方法可以减少for循环中的i
吗?
答案 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)
你不应该改变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)]
答案 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