是否可以在python 3中增加循环内部的for循环?
例如:
for i in range(0, len(foo_list)):
if foo_list[i] < bar
i += 4
如果条件成立,循环计数器i
增加4,否则它只会增加1(或者for循环的步长值是什么)?
我知道while循环更适用于这样的应用程序,但最好知道for循环中是否可以使用这个(或类似的东西)。
谢谢!
答案 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