[python] Python if-else short-hand

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

This question is related to python python-2.7

The answer is


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.


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