在循环内递增for循环
在Python 3中,可以在循环内部增加for循环的计数器吗?
比如说:
for i in range(0, len(foo_list)):
if foo_list[i] < bar
i += 4
在这个例子中,如果条件成立,循环计数器i
会增加4,否则它就只增加1(或者for循环的步长值)。
我知道在这种情况下使用while循环会更合适,但我想知道在for循环中是否可以做到这一点(或者类似的操作)。
谢谢!
5 个回答
0
while i < end:
# do stuff
# maybe i +=1
# or maybe i += 4
我想你可以试着用一个for循环来实现这个,但其实不太推荐。Python的for循环主要是用来查看项目本身,而不是查看它们的位置索引。
1
可以通过一个 for
循环来实现这个功能,使用生成器的 send
方法。这样的话,如果给生成器发送一个新值,就可以修改计数器的值:
def jumpable_range(end):
counter = 0
while counter < end:
jump = yield counter
if jump is None:
counter += 1
else:
counter = jump
foo_list = [1, 2, 3, 4, 5, 6, 7, 8]
bar = 6
iterable = jumpable_range(len(foo_list))
for i in iterable:
if foo_list[i] < bar:
i = iterable.send(i + 4)
print(i)
这段代码的输出结果是:
4
5
6
7
示例: https://repl.it/@blhsing/ImpossibleAcrobaticComputergraphics
1
在你的例子中,i
在每次循环的新迭代时都会被重置(这可能看起来有点反直觉),如下所示:
foo_list = [1, 2, 3]
for i in range(len(foo_list)):
print('Before increment:', i)
i += 4
print('After increment', i)
>>>
Before increment: 0
After increment 4
Before increment: 1
After increment 5
Before increment: 2
After increment 6
continue
是跳过循环中下一次迭代的标准和安全的方法,但把多个 continue
连在一起使用会显得很麻烦,不如直接用 while
循环,正如其他人所建议的那样。
2
有点小技巧...
>>> b = iter(range(10))
>>> for i in b:
... print(i)
... if i==5 : i = next(b)
...
0
1
2
3
4
5
7
8
9
>>>
12
你可以使用一个 while 循环,根据条件来增加 i
的值:
while i < (len(foo_list)):
if foo_list[i] < bar: # if condition is True increment by 4
i += 4
else:
i += 1 # else just increment 1 by one and check next `foo_list[i]`
使用 for 循环时,i
会始终返回到范围内的下一个值:
foo_list = [1,2,3,4,5,6]
bar = 6
for i in range(len(foo_list)):
print("range i ",i)
if foo_list[i] < bar:
i += 4
print("if i",i)
('range i ', 0)
('if i', 4)
('range i ', 1)
('if i', 5)
('range i ', 2)
('if i', 6)
('range i ', 3)
('if i', 7)
('range i ', 4)
('if i', 8)
('range i ', 5)