IFステートメントでOR比較を使用する[複製]
-
02-07-2019 - |
質問
この質問にはすでに回答があります:
- 値に対して複数の変数をテストする方法 21の答え
PythonでIFステートメントを使用する場合、「カスケード」を作成するには以下を実行する必要があります。正しく動作します。
if job == "mechanic" or job == "tech":
print "awesome"
elif job == "tool" or job == "rock":
print "dolt"
「等しい」をチェックするときにPythonが複数の値を受け入れるようにする方法はありますか?たとえば、
if job == "mechanic" or "tech":
print "awesome"
elif job == "tool" or "rock":
print "dolt"
解決
if job in ("mechanic", "tech"):
print "awesome"
elif job in ("tool", "rock"):
print "dolt"
括弧内の値はタプルです。 in
演算子は、左側の項目が右側のハンドルタプル内のどこかにあるかどうかを確認します。
Pythonが in
演算子を使用してタプルまたはリストを検索する場合、線形検索を実行します。右側に多数のアイテムがある場合、これがパフォーマンスのボトルネックになる可能性があります。これを行う大規模な方法は、 frozenset
を使用することです。 :
AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
def func():
if job in AwesomeJobs:
print "awesome"
プログラムの操作中に素晴らしいジョブのリストを変更する必要がない場合は、 set
よりも frozenset
を使用することをお勧めします。
他のヒント
次で使用できます:
if job in ["mechanic", "tech"]:
print "awesome"
非常に大きな数をチェックする場合、チェックするアイテムのセットを保存する価値がある場合があります。例:
AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
...
def func():
if job in AwesomeJobs:
print "awesome"
if job in ("mechanic", "tech"):
print "awesome"
elif job in ("tool", "rock"):
print "dolt"
あなたが直接やりたいことはできないと思いますが、1つの選択肢は次のとおりです。
if job in [ "mechanic", "tech" ]:
print "awesome"
elif job in [ "tool", "rock" ]:
print "dolt"
定数項目を持つタプルは、コンパイルされた関数に定数として保存されます。単一の命令でロードできます。一方、リストとセットは、実行するたびに常に新しく作成されます。
タプルとリストの両方で、演算子内で線形検索が使用されます。セットはハッシュベースのルックアップを使用するため、オプションの数が多いほど高速になります。
他の言語では、switch / selectステートメントを使用して作業を完了します。 これはPythonでも行えます。
所属していません StackOverflow