145

重複の可能性:
Python の三項条件演算子

Pythonで次のことをしたい:

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

明らかに、またはいずれijが制限に達すると、コードはループから抜け出します。ループの内外の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
4

2 に答える 2

323

最も読みやすい方法は

x = 10 if a > b else 11

ただし、andandorも使用できます。

x = a > b and 10 or 11

ただし、「Zen of Python」では「読みやすさが重要」と書かれているため、最初の方法を使用してください。

また、and-or の代わりに変数を配置すると、and-or トリックは失敗し10、それが に評価されFalseます。

ただし、この条件に依存する割り当て以上の場合は、次のように記述した方が読みやすくなります。

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

iコンテナに入れない限りj。しかし、なぜそれが必要なのかを示せば、そうではないことがわかるかもしれません。

于 2013-01-22T15:23:45.437 に答える
18

これを試して:

x = a > b and 10 or 11

これは実行のサンプルです:

>>> a,b=5,7
>>> x = a > b and 10 or 11
>>> print x
11
于 2013-01-22T15:22:48.023 に答える