我有:
for i in range(2,n):
if(something):
do something
else:
do something else
i = 2 **restart the loop
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.有没有办法重新启动该循环?
谢谢
gno*_*med 32
您可能需要考虑使用该逻辑适用的不同类型的循环,因为它是最明显的答案.
也许是:
i=2
while i < n:
if something:
do something
i += 1
else:
do something else
i = 2 #restart the loop
Run Code Online (Sandbox Code Playgroud)
Gre*_*ill 13
i
从循环内更改索引变量不太可能达到预期效果.您可能需要使用while
循环,并自己控制循环变量的递增.每次for
循环,i
都会重新分配下一个值range()
.所以类似于:
i = 2
while i < n:
if(something):
do something
else:
do something else
i = 2 # restart the loop
continue
i += 1
Run Code Online (Sandbox Code Playgroud)
在我的示例中,continue
语句跳回到循环的顶部,跳过该i += 1
迭代的语句.否则,i
按照您的预期递增(与for
循环相同).
这是使用生成器send()
方法的示例:
def restartable(seq):
while True:
for item in seq:
restart = yield item
if restart:
break
else:
raise StopIteration
Run Code Online (Sandbox Code Playgroud)
示例用法:
x = [1, 2, 3, 4, 5]
total = 0
r = restartable(x)
for item in r:
if item == 5 and total < 100:
total += r.send(True)
else:
total += item
Run Code Online (Sandbox Code Playgroud)