Python中在for循环中嵌套使用if和else语句的技巧
for...[if]...构建List (List comprehension) >>> a=[12,3,4,6,7,13,21] >>> newList = [x for x in a] >>> newList [12,21] >>> newList2 = [x for x in a if x%2==0] >>> newList2 [12,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,6] 显然,使用for...[if]...语句更简洁一些。 2.嵌套的for...[if]...语句 >>>a=[12,21] >>>b=['a','b','x'] >>>newList=[(x,y) for x in a for y in b] >>>newList [(12,'a'),(12,'b'),'x'),(3,(4,(6,(7,(13,(21,'x')] >>>newList2=[(x,y) for x in a for y in b if x%2==0 and y<'x'] >>>newList2 [(12,'b')] 嵌套的for...[if]...语句与多重for语句相当,最前面的for语句是最外层的循环。 善用python的else子句 1.配合for/while循环语句使用 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”,如同伪代码一般的好理解而且相比在判断整除的时候设置标志值然后在函数的结尾处判断标志值决定是否打印数字时素数的消息,代码更简洁没有那么多要描述如何做的“过程式”准备工作。 2.配合 try except错误控制使用 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语句完成一些清理操作。 善用else语句块能够让我们编写出更加简明,更加接近自然语言的语义的代码,当然也会更加的pythonic,细微之处大家可以慢慢体会。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |