Python - 一行if-elif-else语句

时间:2014-01-02 17:48:54

标签: python if-statement

我正在尝试将if-elif-else语句压缩成一行。我试过了:

a == 1 ? print "one" : a == 2 ? print "two" : print "none"

但是我遇到了语法错误。我也尝试过:

print "one" if a == 1 else print "two" if a == 2 else print "none"

但我也遇到了语法错误。

我可以做些什么来更好地解决这些问题或创建一个有效的答案?

7 个答案:

答案 0 :(得分:14)

尝试:

print {1: 'one', 2: 'two'}.get(a, 'none')

答案 1 :(得分:8)

Python中的“三元”运算符是表单

的表达式
X if Y else Z

其中XZ是值,Y是布尔表达式。 请尝试以下方法:

print "one" if a==1 else "two" if a==2 else "none"

此处,表达式"two" if a==2 else "none"的值是a==1为false时第一个返回的值。 (它被解析为"one" if a == 1 else ( "two" if a==2 else "none")。)它返回"one""two""none"中的一个,然后作为print语句的唯一参数传递

答案 2 :(得分:4)

使用嵌套条件表达式(三元运算符):

>>> a = 2
>>> print 'one' if a == 1 else 'two' if a == 2 else 'none'
two

答案 3 :(得分:4)

我会使用dict而不是嵌套if

options = {1: "one", 2: "two"}
print options.get(a, 'none')

答案 4 :(得分:2)

使用元组索引和条件:

print ('one', 'two', 'none')[0 if a==1 else 1 if a==2 else 2]

或者,如果与索引的关系可以是表达式:

print ('one', 'two', 'none')[a-1 if a in (1,2) else -1]

您还可以将元组索引方法与dict结合使用以生成索引,以获得比直接dict方法(IMHO)更具可读性的内容:

print ('one', 'two', 'none')[{1:0,2:1}.get(a, -1)]

答案 5 :(得分:0)

print "one" if a == 1 else "two" if a == 2 else "none"

答案 6 :(得分:0)

print "one" if a == 1 else("two" if a ==2 else "None")