Подтвердить что ты не робот

Python if-else - короткая

Возможный дубликат:
Тернарный условный оператор в Python

Я хочу сделать следующее в python:

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

Ясно, что когда либо i, либо j достигнет предела, код выйдет из цикла. Мне нужны значения i и j вне цикла.

Должен ли я действительно делать

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

Или кто-нибудь знает более короткий путь?

Помимо вышеизложенного, могу ли я заставить Python поддерживать что-то похожее на

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

Ответ 1

Наиболее читаемым способом является

x = 10 if a > b else 11

но вы также можете использовать and и or:

x = a > b and 10 or 11

"Zen of Python" говорит, что "удобочитаемость подсчитывается", тем не менее, ищите первый способ.

Кроме того, и-или трюк будет терпеть неудачу, если вы поместите переменную вместо 10, и она примет значение False.

Однако, если больше, чем присваивание, зависит от этого условия, будет более читаемым записать его так, как вы:

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

если вы не поставили i и j в контейнер. Но если вы покажете нам, зачем вам это нужно, вполне возможно, что вы этого не сделаете.

Ответ 2

Попробуйте следующее:

x = a > b and 10 or 11

Это пример выполнения:

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