在循环内增加for循环

时间:2014-10-16 19:04:40

标签: python loops for-loop increment

是否可以在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 :(得分:9)

您可以使用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)

答案 1 :(得分: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是跳转到循环的下一个迭代的标准/安全方式,但将continues链接到一起比将它更加尴尬像其他人建议的那样使用while循环。

答案 2 :(得分:1)

有点hackish ......

>>> 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
>>> 

答案 3 :(得分:0)

while i < end:
  # do stuff
  # maybe i +=1
  # or maybe i += 4

如果您尝试过,我想您可以在for循环中执行此操作,但这不可取。 python循环的重点是查看项目,而不是索引

答案 4 :(得分:0)

可以使用生成器的 send 方法通过 for 循环实现此目的,如果向生成器发送新值,则可以修改计数器:

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