Python if-else short-hand [duplicado]

possível duplicado:
operador ternário condicional em Python

quero fazer o seguinte em python:

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

claramente, quando i ou j atinge um limite, o código vai sair do loop. Preciso dos valores de i e j fora do circuito.

tenho mesmo de fazer

x=0
...
if A[i] > B[j]:
  x = A[i]
  i+=1
else:
  x = B[j]
  j+=1
Ou alguém sabe de um caminho mais curto?

além do acima, posso pedir ao Python para suportar algo semelhante a

a,b=5,7
x = a > b ? 10 : 11
Author: Community, 2013-01-22

2 answers

A maneira mais legível é

x = 10 if a > b else 11

Mas pode usar and e or também:

x = a > b and 10 or 11

O " Zen de Python "diz que" a legibilidade conta", então vá pela primeira via.

Também, o and-OR trick vai falhar se você colocar uma variável em vez de 10 e ele avalia para False.

No entanto, se mais do que a atribuição depende desta condição, será mais legível escrevê-la como você tem:

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

A menos que ponhas i e j num recipiente. Mas se nos mostrares porque Precisas dele, pode acontecer que não precises.

 155
Author: Lev Levitsky, 2013-05-08 19:52:17

Tenta isto:

x = a > b and 10 or 11

Esta é uma amostra de execução:

>>> a,b=5,7
>>> x = a > b and 10 or 11
>>> print x
11
 10
Author: DonCallisto, 2013-01-22 15:22:48