python:重启循环

cbr*_*lak 20 python loops

我有:

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)

  • 但是没有什么能阻止我继续无限期地重置为2,这取决于"if something"测试. (2认同)

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循环相同).


Joe*_*ett 5

这是使用生成器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)