pythoniffor在同⼀⾏
<[if]...构建List (List comprehension)
1.简单的[if]...语句
Python中,[if]...语句⼀种简洁的构建List的⽅法,从for给定的List中选择出满⾜if条件的元素组成新的List,其中if是可以省略的。下⾯举
⼏个简单的例⼦进⾏说明。
>>> a=[12,3,4,6,7,13,21]
>>> newList =[x forx ina]
>>> newList
[12,3,4,6,7,13,21]
>>> newList2 =[x forx ina ifx%2==0]
>>> newList2
[12,4,6]
省略if后,newList构建了⼀个与a具有相同元素的List。但是,newList和a是不同的List。执⾏b=a,b和newList是不同的。newList2是从a中
选取满⾜x%2==0的元素组成的List。如果不使⽤[if]..语句,构建newList2需要下⾯的操作。
>>> newList2=[]
>>>forx ina:
... ifx %2==0:
... newList2.append(x)
>>> newList2
[12,4,6]
显然,使⽤[if]...语句更简洁⼀些。
2.嵌套的[if]...语句
嵌套的[if]...语句可以从多个List中选择满⾜if条件的元素组成新的List。下⾯也举⼏个例⼦。
>>>a=[12,3,4,6,7,13,21]
>>>b=['a','b','x']
>>>newList=[(x, y) forx ina fory inb]
>>>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) forx ina fory inb ifx%2==0and y<'x']
>>>newList2
[(12,'a'), (12,'b'), (4,'a'), (4,'b'), (6,'a'), (6,'b')]
嵌套的[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⼦句的逻辑就会被执⾏到。
先来看⼀个例⼦:
defprint_prime(n):
fori inxrange(2, n):
# found = True
forj inxrange(2, i):
ifi %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语句块会被执⾏到。
defmy_to_int(str_param):
try:
printint(str_param)
exceptValueError:
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,细微之处⼤家可以慢慢体会。a, b, c = 1, 2, 3
1.常规
if a>b:
c = a
else:
python的try和except用法c = b
2.表达式
c = a if a>b else b
3.⼆维列表
c = [b,a][a>b]
4.传说是源⾃某个⿊客
c = (a>b an
d [a] or [b])[0]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论