Python中斷多重循環(huán)的思路總結(jié)
I. 跳出單循環(huán)
不管是什么編程語(yǔ)言,都有可能會(huì)有跳出循環(huán)的需求,比如枚舉時(shí),找到一個(gè)滿足條件的數(shù)就終止。跳出單循環(huán)是很簡(jiǎn)單的,比如:
for i in range(10): if i > 5: print i break
然而,我們有時(shí)候會(huì)需要跳出多重循環(huán),而break只能夠跳出一層循環(huán),比如:
for i in range(10): for j in range(10): if i+j > 5: print i,j break
這樣的代碼并非說(shuō)找到一組 i+j > 5就停止,而是連續(xù)找到10組,因?yàn)閎reak只跳出了for j in range(10)這一重循環(huán)。那么,怎么才能跳出多重呢?在此記錄備忘一下。
II. 跳出多重循環(huán)
事實(shí)上,Python的標(biāo)準(zhǔn)語(yǔ)法是不支持跳出多重循環(huán)的,所以只能利用一些技巧,大概的思路有:寫(xiě)成函數(shù)、利用笛卡爾積、利用調(diào)試。
當(dāng)然最常用的思路是使用變量標(biāo)記法
def f(): flag = 0 for i in range(10): for j in range(i): if i+j>5: print i,j flag = 1 break if flag == 1: break if __name__ == "__main__": f()
寫(xiě)成函數(shù)
在Python中,函數(shù)運(yùn)行到return這一句就會(huì)停止,因此可以利用這一特性,將功能寫(xiě)成函數(shù),終止多重循環(huán)。
例如:
def work(): for i in range(10): for j in range(10): if i+j > 5: return i,j print work()
利用笛卡爾積
這種方法的思路就是,既然可以跳出單循環(huán),我就將多重循環(huán)改寫(xiě)為單循環(huán),這可以利用itertools中的笛卡爾積函數(shù)product,例如:
from itertools import product for i,j in product(range(10), range(10)): if i+j > 5: print i,j break
利用調(diào)試模式
笛卡爾積的方式很巧妙,也很簡(jiǎn)潔,但它只能用于每次循環(huán)的集合都是獨(dú)立的情形,假如每層循環(huán)都與前一層緊密相關(guān),就不能用這種技巧了。這時(shí)候可以用第一種方法,將它寫(xiě)成函數(shù),另外,還可以利用調(diào)試模式。這個(gè)利用了調(diào)試模式中,只要出現(xiàn)報(bào)錯(cuò)就退出的原理,它偽裝了一個(gè)錯(cuò)誤出來(lái)。
class Found(Exception): pass try: for i in range(10): for j in range(i): #第二重循環(huán)跟第一重有關(guān) if i + j > 5: raise Found except Found: print i, j
以上就是盤點(diǎn)Python中斷多重循環(huán)的思路的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Flask進(jìn)階之構(gòu)建RESTful?API和數(shù)據(jù)庫(kù)交互操作
這篇文章主要為大家介紹了Flask進(jìn)階之構(gòu)建RESTful API和數(shù)據(jù)庫(kù)交互操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Tortoise-orm信號(hào)實(shí)現(xiàn)及使用場(chǎng)景源碼詳解
這篇文章主要為大家介紹了Tortoise-orm信號(hào)實(shí)現(xiàn)及使用場(chǎng)景源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03PyTorch中torch.tensor與torch.Tensor的區(qū)別詳解
這篇文章主要介紹了PyTorch中torch.tensor與torch.Tensor的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Python中字典創(chuàng)建、遍歷、添加等實(shí)用操作技巧合集
這篇文章主要介紹了Python中字典創(chuàng)建、遍歷、添加等實(shí)用操作技巧合集,本文講解了字典中常見(jiàn)方法列表、創(chuàng)建字典的五種方法、字典中鍵值遍歷方法等內(nèi)容,需要的朋友可以參考下2015-06-06Python face_recognition實(shí)現(xiàn)AI識(shí)別圖片中的人物
最近碰到了照片識(shí)別的場(chǎng)景,正好使用了face_recognition項(xiàng)目,給大家分享分享。face_recognition項(xiàng)目能做的很多,人臉檢測(cè)功能也是有的,是一個(gè)比較成熟的項(xiàng)目。感興趣的可以了解一下2022-01-01在python中利用opencv簡(jiǎn)單做圖片比對(duì)的方法
今天小編就為大家分享一篇在python中利用opencv簡(jiǎn)單做圖片比對(duì)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python常駐任務(wù)實(shí)現(xiàn)接收外界參數(shù)代碼解析
這篇文章主要介紹了Python常駐任務(wù)實(shí)現(xiàn)接收外界參數(shù)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07