Python中else在for...in...的作用及其相關搭配

else在for…in…的作用及其相關搭配

一、基礎知識

由於本人對Python只有皮毛的理解,所以先從初學者的角度堆砌一些基本的知識,也方便引出後面的問題。(有一定Python基礎的可以略過不看)。

首先我們知道Python中常用for…in…來迭代,舉個例子:

fruit_list = ['apple', 'banana', 'pear', 'peach']
for fruit in fruit_list:
	print(fruit)

以上代碼可以遍歷整個fruit_list,把所有元素打印出來。
那麼,我們可以通過條件語句if來對列表中的元素進行篩選,比如:

fruit_list = ['apple', 'banana', 'pear', 'peach']
for fruit in fruit_list:
	if fruit == 'apple':
		print(fruit)

如果條件判斷得稍微複雜一點,再加上else和if搭配,比如:

fruit_list = ['apple', 'banana', 'pear', 'peach']
for fruit in fruit_list:
	if fruit == 'apple':
		print(fruit)
	else:
		print('not apple')

則可以達到這樣一個效果:對於for循環的每一次迭代,如果if的條件滿足,執行if語句的內容,否則執行else語句的內容。

以上就是本文的基礎知識(簡直就是在說廢話)接下來正式進入本文主題:

二、for…in…和if…else…在實際搭配中遇到的問題

假設我有一個叫做findList的方法,它能返回一個滿足我需求的列表,如果它找不到我所要的列表,則返回一個空列表。現在我要通過這個findList方法,利用for…in…來迭代打印列表裏的每一個元素,該怎麼辦?

my_list = List.findList(參數,參數,參數...)			
#假設findList這個方法存在,那麼my_list得到一個列表
for element in my_list:
	if element:
		print(element)
	else:
		print('no element')

好像沒啥問題啊,不就這麼簡單嗎?對於my_list中的每個元素,打印出來。如果my_list中沒有元素,打印‘no element’,哪來什麼問題。

我當時也是這麼想的,但是,前面提到了findList方法可能返回一個空列表,如果my_list是空列表,它是不是真的會像我們預期的那樣打印‘no element’?

我們來試一下:

my_list = []
for element in my_list:
	if element:
		print(element)
	else:
		print('no element')

運行結果是什麼?好像什麼反應也沒有啊!照理說如果my_list爲空的話,if element 條件不成立,應該執行else語句的內容,打印‘no element’纔對啊!

(有興趣的朋友這裏可以暫停一下,先不要往下看,嘗試把else改成elif然後加上一些條件比如element==None之類的,總之自己可以各方面嘗試一下)

下面解釋一下原因:
對於一個空的列表來說,是不會進入for…in…循環的,也就是說for循環根本就沒進去,更別談什麼if和else了。

現在我們沿用上一塊代碼,現在我們給my_list增加新的元素,讓它不再是空列表,同時更改if的判斷條件,人爲地讓if條件不成立,看看什麼情況:

my_list.append('girlfriend')
for element in my_list:
	if element == 'boyfriend':
		print(element)
	else:
		print('no element')

可以看到,只有在for遍歷的對象非空的時候,當條件不滿足,else語句纔會正常執行。下面我們通過print函數來再次驗證一次(嚴謹一些):

my_list = []
for element in my_list:
	print('in the for loop')
	if element:
		print(element)
	else:
		print('no element')

得到的結果顯然是什麼都沒有,什麼都不輸出,for循環根本就沒進去。

寫到這裏我才突然意識到,這並不是else語句執不執行的問題,而是for循環執不執行的問題(希望大家不要被我的行文思路帶偏了)。

以上問題總結成一句話:for循環無法迭代一個空對象

else的其它搭配

從CSDN的另一篇博文得知,else除了和if搭配之外,還可以跟for搭配,其用法是,for循環執行完畢後(注意不是單次迭代)會執行else裏的內容(當然啦else要與for的縮進一致),舉個栗子:

my_list = [12, 51, 65, 42, 35, 98]
for element in my_list:
	if element>50:
		print(element)
else:
		print('finished the for loop')

打印的結果爲:
51
65
98
finished the for loop

遍歷整個列表,大於50就輸出,最後遍歷完成後執行else語句輸出finished the for loop,沒毛病

那如果我們需要遍歷一個列表,判斷符合某條件的元素是否存在,如果存在就打印輸出,不存在就輸出‘no such element’,就可以寫出這樣的代碼:

fruit_list = ['apple', 'banana', 'pear', 'peach']
for fruit in fruit_list:
	if fruit == 'apple':
		print('apple exist')
		break
else:
	print('no such element')

注意這裏if語句裏多了個break,如果把break去掉的話,到最後還是會輸出‘no such element’,所以,這裏寫這段代碼只是想強調,for循環執行完畢後會執行else裏的內容,而break的加入使得for循環並沒有執行完畢,而是break出來了,所以else裏面的內容不會被執行。

總結爲一句話:當for循環執行完畢(沒有被break打斷)後會執行與之匹配的else裏的內容

以上大概就是本文的全部內容了,才疏學淺,初學Python,怕是有所疏漏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章