我有一个关于Python中if-else块的问题,这里有一个例子:
a = [1,2,3]
b = [i if i%2 else i+1 for i in a]
# following sentence is wrong
c = [i if i%2 for i in a else i+1]
但在某些情况下,if
可以写在for
之后,就像这样:
d = [i for i in a if a%2]
我想知道这是为什么,谢谢大家!
这个问题已经解决了,再次感谢!!
在Python中实际使用if else
有多种方式。最基本的用法当然是有条件地执行代码块:
if <condition>:
<body>
else:
<body>
if语句块在条件为真时执行,否则else语句块开始执行。
另一个用例是当你想有条件地赋值时:
x = y if <condition> else z
在上述条件赋值中,如果条件为真,则赋变量x为y的值,否则赋变量x为z的值,也广泛用于推导式语句和返回语句中:[i if i%2==0 else i+1 for i in <iterable>]
另一个用例是只使用if
,这是在推导中用来过滤掉一些值:
x = [i for i in <iterable> if <condition>]
上面的表达式将只包含iterable中条件为真的项。
另一个用例是else
,它对Python来说是非常独特的,它允许在循环后使用else
块:
for i in <iterable>:
<loop body>
else:
<else body>
如果循环正常退出而没有break语句,则执行else
部分,这意味着即使代码没有进入循环体,也会执行else部分。
这种if-else表达式的正式名称是(在Python文档中)条件表达式,也称为三元条件运算符。
在第二个和第三个示例中,您将其与列表推导式(列表括号中的for循环)结合使用。
在第二个示例中,将条件表达式(正确地)放在列表推导式的for循环之前。这是一个有效的语法。对于每一个被循环过的项,都计算if-else表达式。
在第三个示例中,将for循环放在if和else之间。这是无效的语法,老实说,我不知道您希望输出什么。
在你的问题结束时,你说在某些情况下,for
可以放在else
之前(和if
之后)。在您给出的示例中,没有for
。