python基础教程:Python中在for循环中嵌套使用if和else语句的技巧

Oralie ·
更新时间:2024-09-20
· 740 次阅读

Python的语法糖非常强大,比如Python中在for循环中嵌套使用if和else语句的技巧便十分给力,下面我们就举几个例子来看详细的用法:
for…[if]…构建List (List comprehension)
1.简单的for…[if]…语句
Python中,for…[if]…语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的。下面举几个简单的例子进行说明

>>> a=[12, 3, 4, 6, 7, 13, 21] >>> newList = [x for x in a] >>> newList [12, 3, 4, 6, 7, 13, 21] >>> newList2 = [x for x in a if x%2==0] >>> newList2 [12, 4, 6]

省略if后,newList构建了一个与a具有相同元素的List。但是,newList和a是不同的List。执行b=a,b和newList是不同的。newList2是从a中选取满足x%2==0的元素组成的List。如果不使用for…[if]…语句,构建newList2需要下面的操作。

>>> newList2=[] >>> for x in a: ... if x %2 == 0: ... newList2.append(x) >>> newList2 [12, 4, 6]

显然,使用for…[if]…语句更简洁一些。

2.嵌套的for…[if]…语句
嵌套的for…[if]…语句可以从多个List中选择满足if条件的元素组成新的List。下面也举几个例子。

>>>a=[12, 3, 4, 6, 7, 13, 21] >>>b=['a', 'b', 'x'] >>>newList=[(x, y) for x in a for y in b] >>>newList [(12, 'a'), (12, 'b'), (12, 'x'), (3, 'a'), (3, 'b'), (3, 'x'), (4, 'a'), (4, 'b'), (4, 'x'), (6, 'a'), (6, 'b'), (6, 'x'), (7, 'a'), (7, 'b'), (7, 'x'), (13, 'a'), (13, 'b'), (13, 'x'), (21, 'a'), (21, 'b'), (21, 'x')] >>>newList2=[(x, y) for x in a for y in b if x%2==0 and y>>newList2 [(12, 'a'), (12, 'b'), (4, 'a'), (4, 'b'), (6, 'a'), (6, 'b')]

嵌套的for…[if]…语句与多重for语句相当,最前面的for语句是最外层的循环。

善用python的else子句
在日常coding中,分支语句的使用非常普遍,经常会根据是否满足一定的条件对代码执行的逻辑进行一些控制,所以大家对if[elif[else]]一定不会陌生。分支语句中的else子句在其它的条件不满足的时候会被执行到,适当的使用分支语句能够让我们的代码逻辑更加的丰富。
在分支语句中使用else子句在一些常见的编程语言中的用法基本相同,类似于提供了一条默认的执行路径,配合if等条件判断语句使用,相比其它的编程语言(c#, java, js等)在python中,else有一些特殊的用法,配合for, while等循环语句使用,甚至还能配合异常处理try except语句进行使用,能够让我们的代码更加的简洁。

1.配合for/while循环语句使用
在for循环语句的后面紧接着else子句,在循环正常结束的时候(非return或者break等提前退出的情况下),else子句的逻辑就会被执行到。先来看一个例子:

def print_prime(n): for i in xrange(2, n): # found = True for j in xrange(2, i): if i % j == 0: # found = False break else: print "{} it's a prime number".format(i) # if found: # print "{} it's a prime number".format(i) print_prime(7)

结果:

2 it's a prime number 3 it's a prime number 5 it's a prime number

一个简单打印素数的例子,判断某个数字是否是素数的时候需要遍历比它自己小的整数,任何一个满足整除的情况则判断结束,否则打印这是一个素数的info,有了else的加持,整个例子的逻辑相当的“self-expressive”,如同伪代码一般的好理解而且相比在判断整除的时候设置标志值然后在函数的结尾处判断标志值决定是否打印数字时素数的消息,代码更简洁没有那么多要描述如何做的“过程式”准备工作。
ps: 大家可以把例子中的被注释代码运行对比下效果。

2.配合 try except错误控制使用
在异常处理语句中,else有相似的用法,当try代码块没有抛出任何的异常时,else语句块会被执行到。

def my_to_int(str_param): try: print int(str_param) except ValueError: print 'cannot convert {} to a integer'.format(str_param) else: print 'convert {} to integer successfully'.format(str_param) my_to_int("123") my_to_int("me123")

结果:

123 convert 123 to integer successfully cannot convert me123 to a integer

如打印日志所示,在转换成功未发生错的的时候,else语句里的逻辑会被执行,当然这个例子可能并没有什么太多的实际的用处,但大致能说明else在错误处理中的用处:简化逻辑,避免使用一些标志值就能够准确把握是否发生错误的情况来做一些实际的操作(比如在保存数据的时候如果发生错误,在else语句块中进行rollback的操作,然后紧接着还能加上finally语句完成一些清理操作。
非常感谢你的阅读
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!


作者:程序员牡蛎



python基础 python基础教程 IF ELSE for 技巧 for循环 Python 教程 嵌套

需要 登录 后方可回复, 如果你还没有账号请 注册新账号