Python if-else short-hand [duplicate]

Possible Duplicate:
Ternary conditional operator in Python

I want to do the following in python:

while( i < someW && j < someX){ int x = A[i] > B[j]? A[i++]:B[j++]; .... } 

Clearly, when either i or j hits a limit, the code will break out of the loop. I need the values of i and j outside of the loop.

Must I really do

x=0 ... if A[i] > B[j]: x = A[i] i+=1 else: x = B[j] j+=1 

Or does anyone know of a shorter way?

Besides the above, can I get Python to support something similar to

a,b=5,7 x = a > b ? 10 : 11 
10

2 Answers

The most readable way is

x = 10 if a > b else 11 

but you can use and and or, too:

x = a > b and 10 or 11 

The "Zen of Python" says that "readability counts", though, so go for the first way.

Also, the and-or trick will fail if you put a variable instead of 10 and it evaluates to False.

However, if more than the assignment depends on this condition, it will be more readable to write it as you have:

if A[i] > B[j]: x = A[i] i += 1 else: x = A[j] j += 1 

unless you put i and j in a container. But if you show us why you need it, it may well turn out that you don't.

5

Try this:

x = a > b and 10 or 11 

This is a sample of execution:

>>> a,b=5,7 >>> x = a > b and 10 or 11 >>> print x 11 
4

You Might Also Like