Python-одна строка if-elif-else оператор

Я пытаюсь сжать оператор 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 ответов


попробуй:

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

оператор "ternary" в 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 ложно. (Он разбирается как "one" if a == 1 else ( "two" if a==2 else "none").) Он возвращает один из "one", "two" или "none", который затем передается как единственный аргумент для print заявление.


Я бы использовал dict вместо вложенного if

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

использовать вложенные condtional выражения (тернарный оператор):

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

используйте индекс кортежа и условное:

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

альтернативно, если отношение a к индексу может быть выражением:

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)]

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

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