Advertisement
Advertisement


Putting a simple if-then-else statement on one line


Question

I'm just getting into Python and I really like the terseness of the syntax. However, is there an easier way of writing an if-then-else statement so it fits on one line?

For example:

if count == N:
    count = 0
else:
    count = N + 1

Is there a simpler way of writing this? I mean, in Objective-C I would write this as:

count = count == N ? 0 : count + 1;

Is there something similar for Python?

Update

I know that in this instance I can use count == (count + 1) % N.

I'm asking about the general syntax.

2019/09/05
1
932
9/5/2019 7:44:57 PM

Accepted Answer

That's more specifically a ternary operator expression than an if-then, here's the python syntax

value_when_true if condition else value_when_false

Better Example: (thanks Mr. Burns)

'Yes' if fruit == 'Apple' else 'No'

Now with assignment and contrast with if syntax

fruit = 'Apple'
isApple = True if fruit == 'Apple' else False

vs

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
2017/05/23
1730
5/23/2017 12:10:47 PM

Moreover, you can still use the "ordinary" if syntax and conflate it into one line with a colon.

if i > 3: print("We are done.")

or

field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural)) 
2019/01/10

count = 0 if count == N else N+1

- the ternary operator. Although I'd say your solution is more readable than this.

2010/05/10

General ternary syntax:

value_true if <test> else value_false

Another way can be:

[value_false, value_true][<test>]

e.g:

count = [0,N+1][count==N]

This evaluates both branches before choosing one. To only evaluate the chosen branch:

[lambda: value_false, lambda: value_true][<test>]()

e.g.:

count = [lambda:0, lambda:N+1][count==N]()
2015/03/24

<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

with your code-snippet it would become,

count = 0 if count == N else N + 1
2010/05/10

Source: https://stackoverflow.com/questions/2802726
Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Email: [email protected]