16

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"
4

6 に答える 6

39
if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

括弧内の値はタプルです。inオペレーターは、左側の項目が右側のハンドルタプル内のどこかにあるかどうかを確認します。

inPythonが演算子を使用してタプルまたはリストを検索する場合、線形検索を実行することに注意してください。右側に多数のアイテムがある場合、これはパフォーマンスのボトルネックになる可能性があります。これを行う大規模な方法は、frozenset:を使用することです。

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
def func():
    if job in AwesomeJobs:
        print "awesome"

プログラムの操作中にすばらしいジョブのリストを変更する必要がない場合は、 frozensetoverを使用することをお勧めします。set

于 2008-09-29T09:13:53.337 に答える
4

次の場所で使用できます:

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

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

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

def func():
    if job in AwesomeJobs:
        print "awesome"
于 2008-09-29T09:15:53.847 に答える
1
if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"
于 2008-09-29T09:14:14.427 に答える
1

自分がやりたいことを直接できるとは思いませんが、1つの選択肢は次のとおりです。

if job in [ "mechanic", "tech" ]:
    print "awesome"
elif job in [ "tool", "rock" ]:
    print "dolt"
于 2008-09-29T09:14:18.267 に答える
1

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

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

于 2008-09-29T16:31:06.687 に答える
0

他の言語では、switch/selectステートメントを使用して作業を完了します。Pythonでもそれを行うことができます

于 2008-09-29T09:14:54.037 に答える