index
シーケンスの方法を使用して、一致するアイテムのインデックスを簡単に見つけることができます。
choices=('a','b','c','d')
test=raw_input('enter letter: ')
if test in choices:
index = choices.index(test)
# do something based on index
list
(サンプルコードで名前が付けられた変数の名前を、Pythonの基本型の事前定義された名前であるchoices
ために変更しましlist
た。さらに、変数には値のタプルが含まれていますが、値のタプルが含まれているため、値のタプルが含まれています。角括弧の代わりに括弧。)
に割り当てられた値がのいずれかに等しいif test in choices:
かどうかをすばやく通知します。この方法は基本的に同じことを行いますが、どれのインデックスも教えてくれます。それらの重要な違いの1つは、値がシーケンスにない場合、メソッドはをスローするのに対し、演算子は一致するものがない場合にのみ戻ることです。test
choices
index()
index()
ValueError
in
False
それらは非常に類似しているため、示されているように両方を使用することはまれです(非効率的です)。
コードの残りの部分から、おそらくあなたが本当に知りたかったのは、の値に基づいてディスパッチする良い方法であるように見えますtest
。switch
他の多くの回答が示すように、他のプログラミング言語にはまたはcase:
ステートメントがないため、これはPythonの辞書を使用して行われることがよくあります。
他の例に追加するために、オンザフライで1つ(辞書)を作成して使用するためのやや斬新な方法を次に示します。
def func_a(): pass
def func_b(): pass
def func_c(): pass
def func_d(): pass
test = raw_input('enter letter: ')
try:
{'a': func_a,
'b': func_b,
'c': func_c,
'd': func_d,
}[test]() # call corresponding function
except KeyError:
# handle other values of test
...
もう1つの方法は、func_x
定義されたの名前がすべてグローバル変数であるため、独自の辞書を作成する必要がないため、 globals()
代わりに組み込み関数によって返される辞書を使用することです。
test = raw_input('enter letter: ')
try:
globals()['func_'+test]() # call appropriately named function
except KeyError:
# handle illegal values of test
...