あり、個別に各条件をテストするよりも任意のより良い方法は、実際にはありませんが、リスト内包でコンパクトにそれを行うことができ、例えば:
conditions = (xpr0, xpr1, xpr2, xpr3)
print [i for i, xpr in enumerate(conditions) if xpr]
真である式のインデックスのリストを出力します。しかし、これはあなたがor
で得る短絡を実行しません。もちろん
、あなたは、break
声明で、「伝統的な」for
ループを使って、例えば短絡を強制することができます。
for i, xpr in enumerate(conditions):
if xpr:
print i, xpr
break
これは短絡行わとまったく同じではありませんが、
if xpr0 or xpr1 or xpr2 or xpr3:
conditions
リストのすべての式が既に事前計算されているためです。ヒロの主人公はコメントで言及したよう
、あなたはそれらの式のいずれかが
any(conditions)
に該当するかどうかをテストすることができ、伝統的なfor
ループと同じようにそのます短絡上のコード。
FWIWは通常、短絡ポイントに達した後に不要な式の評価を避けるため、リスト作成者ではなくジェネレータ式にany
とall
を使用しますが、ここでは該当しません。
['any(xpr1、xpr2、...)'](https://docs.python.org/3.5/library/functions.html#any)についてはどうですか?デバッグするには '(xp1、xpr2、...) 'の中で' [bool(x)for x]を使うことができます。 –
@hiro all()は、すべての要素がTrueであればTrueを返し、少なくとも1つの要素がTrueであればUserZer0からの(...)がTrueを返します。 – Humbalan
@Humbalanはい、ちょうど気づいて修正しました。 –