Reputation: 31738
How can you continue
the parent loop of say two nested loops in Python?
for a in b:
for c in d:
for e in f:
if somecondition:
<continue the for a in b loop?>
I know you can avoid this in the majority of cases but can it be done in Python?
Upvotes: 87
Views: 128954
Reputation: 1291
#infinite wait till all items obtained
while True:
time.sleep(0.5)
for item in entries:
if self.results.get(item,None) is None:
print(f"waiting for {item} to be obtained")
break #continue outer loop
else:
break
#continue
I wish there could be a labeled loop ...
Upvotes: 0
Reputation: 11
lista = ["hello1", "hello2" , "world"]
for index,word in enumerate(lista):
found = False
for i in range(1,3):
if word == "hello"+str(i):
found = True
break
print(index)
if found == True:
continue
if word == "world":
continue
print(index)
Now what's printed :
>> 1
>> 2
>> 2
This means that the word no.1 ( index = 0 ) appeard first (there's no way for something to be printed before the continue statement). The word no.2 ( index = 1 ) appeared second ( the word "hello1" managed to be printed but not the rest ) and the word no.3 appeard third what mean's that the words "hello1" and "hello2" managed to be printed before the for loop reached this said third word.
To sum up it's just using the found = False / True boolean and the break statement.
Hope it helps!
Upvotes: 0
Reputation: 21
Looking at All the answers here its all different from how i do it\n Mission:continue to while loop if the if condition is true in nested loop
chars = 'loop|ing'
x,i=10,0
while x>i:
jump = False
for a in chars:
if(a = '|'): jump = True
if(jump==True): continue
Upvotes: 1
Reputation: 31
use a boolean flag
problem = False
for a in b:
for c in d:
if problem:
continue
for e in f:
if somecondition:
problem = True
Upvotes: 3
Reputation: 63200
You use break
to break out of the inner loop and continue with the parent
for a in b:
for c in d:
if somecondition:
break # go back to parent loop
Upvotes: 20
Reputation: 304175
from itertools import product
for a in b:
for c, e in product(d, f):
if somecondition:
break
Upvotes: 13
Reputation: 97591
Here's a bunch of hacky ways to do it:
Create a local function
for a in b:
def doWork():
for c in d:
for e in f:
if somecondition:
return # <continue the for a in b loop?>
doWork()
A better option would be to move doWork somewhere else and pass its state as arguments.
Use an exception
class StopLookingForThings(Exception): pass
for a in b:
try:
for c in d:
for e in f:
if somecondition:
raise StopLookingForThings()
except StopLookingForThings:
pass
Upvotes: 30
Reputation: 95652
I would go with 5 every time.
Upvotes: 84