python 中怎样在多层循环间灵活的跳转?

2016-10-18 12:04:35 +08:00
 vtoexsir
isbreak=False
for i in ['a','b','c']:
for ii in range(3):
print i,ii
if ii==2:
print 'ii=1 时,内层循环 break,同时外层循环 break'
isbreak=True
break
if isbreak:
isbreak=False
break
如上代码,当内层循环 break 时,外层循环也 break.
请问,还有其他写法,可以实现这样的功能吗?
多谢您的回复!
3474 次点击
所在节点    Python
17 条回复
stamaimer
2016-10-18 12:07:59 +08:00
缩进
upczww
2016-10-18 13:09:56 +08:00
注意缩进啊,这样别人没法看。
ipwx
2016-10-18 13:47:58 +08:00
try: .... except SomeException: pass
SuperMild
2016-10-18 13:50:51 +08:00
写成函数,直接 return
lxy
2016-10-18 14:16:23 +08:00
除了上面所说的封装函数 return 之外,还有一种貌似不被一些人接受的方法,就是利用 for...else 结构,同时省去一个 isbreak 变量:
for i in ['a','b','c']:
for ii in range(5):
print i,ii
if ii == 2:
print 'ii=2 时,内层循环 break,同时外层循环 break'
break
else:
continue
break
lxy
2016-10-18 14:18:05 +08:00
Contextualist
2016-10-18 14:30:06 +08:00
用 itertools 里的 product 来合并多层循环:
>>> from itertools import product
>>> for i,ii in product(['a','b','c'], range(5)):
. . . . . . . .print i,ii
. . . . . . . .if ii==2:
. . . . . . . . . . . .break
ipconfiger
2016-10-18 14:35:20 +08:00
循环超过两层就该想办法优化代码结构了, 要尽量打破多层次的循环
haihan
2016-10-18 15:09:20 +08:00
利用 while 代替 for 即可。
Allianzcortex
2016-10-18 16:08:25 +08:00
for-else
ShiHou
2016-10-18 16:12:31 +08:00
1. 用语法糖减少锁进
2. 状态机代替条件判断
wind3110991
2016-10-18 16:29:28 +08:00
这个场景,最简单的方法:像楼上说的,要不就用 while 代替 for ,省去用 isbreak 进行复杂的逻辑判断;要不就封装成函数,直接内层 return ,简单明了,两个 for 以上场景的代码有很大优化的空间,可以考虑下用一些类似 yield 或者 while-loop 移除装饰器
Yinz
2016-10-18 17:54:41 +08:00
自定义一个 Exception 需要跳出的时候 raise BreakException, 外层 except 即可
dsg001
2016-10-18 20:15:54 +08:00
```python
def gen():
for i in ['a','b','c','d','e']:
for ii in range(5):
yield i, ii

for i,ii in gen():
if ii==2:
break

```

目前这种思路
vtoexsir
2016-10-18 21:14:06 +08:00
@Contextualist
这种写法似乎更简单!
wgjak47
2016-10-18 21:20:58 +08:00
是不是把代码抽出来,变成函数, break 都改成 return ?
kgf0ry
2016-10-19 01:15:18 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX