抱歉,我不会markdown,刚看看!抱歉!
isbreak=False
for i in ['a','b','c']:
for ii in range(5):
print i,ii
if ii==2:
print 'ii=2时,内层循环break,同时外层循环break'
isbreak=True
break
if isbreak:
isbreak=False
break
如上代码,当内层循环break时,外层循环也break. 请问,还有其他写法,可以实现这样的功能吗? 多谢您的回复!
1
stamaimer 2016 年 10 月 18 日 via iPhone
缩进
|
2
upczww 2016 年 10 月 18 日
注意缩进啊,这样别人没法看。
|
3
ipwx 2016 年 10 月 18 日
try: .... except SomeException: pass
|
4
SuperMild 2016 年 10 月 18 日
写成函数,直接 return
|
5
lxy 2016 年 10 月 18 日
除了上面所说的封装函数 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 |
6
lxy 2016 年 10 月 18 日
|
7
Contextualist 2016 年 10 月 18 日 via iPad 用 itertools 里的 product 来合并多层循环:
>>> from itertools import product >>> for i,ii in product(['a','b','c'], range(5)): . . . . . . . .print i,ii . . . . . . . .if ii==2: . . . . . . . . . . . .break |
8
ipconfiger 2016 年 10 月 18 日
循环超过两层就该想办法优化代码结构了, 要尽量打破多层次的循环
|
9
haihan 2016 年 10 月 18 日
利用 while 代替 for 即可。
|
10
Allianzcortex 2016 年 10 月 18 日
for-else
|
11
ShiHou 2016 年 10 月 18 日
1. 用语法糖减少锁进
2. 状态机代替条件判断 |
12
wind3110991 2016 年 10 月 18 日
这个场景,最简单的方法:像楼上说的,要不就用 while 代替 for ,省去用 isbreak 进行复杂的逻辑判断;要不就封装成函数,直接内层 return ,简单明了,两个 for 以上场景的代码有很大优化的空间,可以考虑下用一些类似 yield 或者 while-loop 移除装饰器
|
13
Yinz 2016 年 10 月 18 日
自定义一个 Exception 需要跳出的时候 raise BreakException, 外层 except 即可
|
14
dsg001 2016 年 10 月 18 日
```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 ``` 目前这种思路 |
15
vtoexsir OP @Contextualist
这种写法似乎更简单! |
16
wgjak47 2016 年 10 月 18 日 via Android
是不是把代码抽出来,变成函数, break 都改成 return ?
|
17
kgf0ry 2016 年 10 月 19 日 via Android |