有没有比抛出异常更简单的方法来打破嵌套循环?(在Perl中,您可以为每个循环提供标签,并至少继续一个外部循环。)
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
"break both loops"
也就是说,有没有比以下更好的方法:
class BreakIt(Exception): pass
try:
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
raise BreakIt
except BreakIt:
pass
使用itertools.product !
from itertools import product
for x, y in product(range(10), range(10)):
#do whatever you want
break
这是itertools的链接。python文档中的产品:
http://docs.python.org/library/itertools.html#itertools.product
你也可以循环一个包含2个for的数组理解,并在任何你想要的时候中断。
>>> [(x, y) for y in ['y1', 'y2'] for x in ['x1', 'x2']]
[
('x1', 'y1'), ('x2', 'y1'),
('x1', 'y2'), ('x2', 'y2')
]
使用itertools.product !
from itertools import product
for x, y in product(range(10), range(10)):
#do whatever you want
break
这是itertools的链接。python文档中的产品:
http://docs.python.org/library/itertools.html#itertools.product
你也可以循环一个包含2个for的数组理解,并在任何你想要的时候中断。
>>> [(x, y) for y in ['y1', 'y2'] for x in ['x1', 'x2']]
[
('x1', 'y1'), ('x2', 'y1'),
('x1', 'y2'), ('x2', 'y2')
]