web-dev-qa-db-ja.com

OR IFステートメントとの比較の使用

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"
15
crystalattice
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"

プログラムの実行中に素晴らしいジョブのリストを変更する必要がない場合は、frozensetよりもsetを使用することをお勧めします。

37
Greg Hewgill

以下で使用できます。

if job  in ["mechanic", "tech"]:
    print "awesome"

非常に大きな数をチェックするときは、チェックする項目のセットを保管しておく方が高速になるため、チェックする価値があるかもしれません。例えば。

AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
...

def func():
    if job in AwesomeJobs:
        print "awesome"
4
Brian
if job in ("mechanic", "tech"):
    print "awesome"
Elif job in ("tool", "rock"):
    print "dolt"

私はあなたがあなたが望むことを直接行うことができるとは思いませんが、一つの選択肢は:

if job in [ "mechanic", "tech" ]:
    print "awesome"
Elif job in [ "tool", "rock" ]:
    print "dolt"
1
Jason Etheridge

定数項目を持つタプルは、コンパイルされた関数に定数として格納されます。 1つの命令でロードできます。一方、リストとセットは、実行ごとに常に新しく作成されます。

タプルとリストはどちらも、演算子内で線形検索を使用します。セットはハッシュベースのルックアップを使用するため、オプションの数が多いほど高速になります。

1
Markus Jarderot

他の言語では、switch/selectステートメントを使用してジョブを完了します。 python too でもできます。

0
Oli