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,怕是有所疏漏。

猜你喜欢

转载自blog.csdn.net/weixin_44692935/article/details/101033143
今日推荐