我正在尝试将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"
但我也遇到了语法错误。
我可以做些什么来更好地解决这些问题或创建一个有效的答案?
答案 0 :(得分:14)
尝试:
print {1: 'one', 2: 'two'}.get(a, 'none')
答案 1 :(得分:8)
Python中的“三元”运算符是表单
的表达式X if Y else Z
其中X
和Z
是值,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")