for i in range(2,n): if(something): do something else: do something else i = 2 **restart the loop
But that doesn’t seem to work. Is there a way to restart that loop?
You may want to consider using a different type of loop where that logic is applicable, because it is the most obvious answer.
i=2 while i < n: if something: do something i += 1 else: do something else i = 2 #restart the loop
Changing the index variable
i from within the loop is unlikely to do what you expect. You may need to use a
while loop instead, and control the incrementing of the loop variable yourself. Each time around the
i is reassigned with the next value from
range(). So something like:
i = 2 while i < n: if(something): do something else: do something else i = 2 # restart the loop continue i += 1
In my example, the
continue statement jumps back up to the top of the loop, skipping the
i += 1 statement for that iteration. Otherwise,
i is incremented as you would expect (same as the
Here is an example using a generator’s
def restartable(seq): while True: for item in seq: restart = yield item if restart: break else: raise StopIteration
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
Just wanted to post an alternative which might be more genearally usable. Most of the existing solutions use a loop index to avoid this. But you don’t have to use an index – the key here is that unlike a for loop, where the loop variable is hidden, the loop variable is exposed.
You can do very similar things with iterators/generators:
x = [1,2,3,4,5,6] xi = iter(x) ival = xi.next() while not exit_condition(ival): # Do some ival stuff if ival == 4: xi = iter(x) ival = xi.next()
It’s not as clean, but still retains the ability to write to the loop iterator itself.
Usually, when you think you want to do this, your algorithm is wrong, and you should rewrite it more cleanly. Probably what you really want to do is use a generator/coroutine instead. But it is at least possible.
a = ['1', '2', '3'] ls =  count = False while ls != a : print(a[count]) if a[count] != a[-1] : count = count + 1 else : count = False
Restart while loop.