236

How might I compress an if/else statement to one line in Python?

Karl Knechtel
61.4k14 gold badges134 silver badges193 bronze badges
asked Jul 17, 2012 at 19:13
5

4 Answers 4

393

An example of Python's way of doing "ternary" expressions:

i = 5 if a > 7 else 0

translates into

if a > 7:
 i = 5
else:
 i = 0

This actually comes in handy when using list comprehensions, or sometimes in return statements, otherwise I'm not sure it helps that much in creating readable code.

The readability issue was discussed at length in this recent SO question better way than using if-else statement in python.

It also contains various other clever (and somewhat obfuscated) ways to accomplish the same task. It's worth a read just based on those posts.

answered Jul 17, 2012 at 19:15
Sign up to request clarification or add additional context in comments.

2 Comments

How do i use it in the return statement? return count if (count * (distance < within_radius)) > 0 else (continue)
How can I use a boolean list in between? list = 5 if [boolean list] else 0?
72

Python's if can be used as a ternary operator:

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
answered Jul 17, 2012 at 19:15

1 Comment

Just want to add the "true" command-line one-line syntax for the that. I have searched a lot how to do that, but no one answer contains this information: $ python -c "import sys; var=1; [ sys.stdout.write('POS\n') if var>0 else sys.stdout.write('NEG\n')]"
45

Only for using as a value:

x = 3 if a==2 else 0

or

return 3 if a==2 else 0
answered Jul 17, 2012 at 19:14

1 Comment

This is not restricted to assignment. It can be used in any expression.
29

There is the conditional expression:

a if cond else b

but this is an expression, not a statement.

In if statements, the if (or elif or else) can be written on the same line as the body of the block if the block is just one like:

if something: somefunc()
else: otherfunc()

but this is discouraged as a matter of formatting-style.

answered Jul 17, 2012 at 19:16

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.