pythonにはいろんな構文や演算子があり、他の言語よりも短く楽にコーディングをすることができます。今回は、数あるPythonの演算子の中から、さまざまなところで使われるinについて説明します。

in演算子の使い方

in演算子は、特定の値を持つ要素がリストやタプルの中に存在するかどうかを確かめるための演算子です。in演算子の基本的な構文は以下の通りです。

指定の要素 in リスト

リストの部分はタプルや辞書型でも同じです。in演算子は、指定の要素がリストやタプルの中に存在するかどうかを調べ、もし存在する場合はTrueを返し、存在しない場合はFalseを返します。

list1 = ['tanaka', 'satou', 'suzuki', 'kimura']
print('tanaka' in list1)
print('takenaka' in list1)

実行結果

True
False

この例では名前のリストの中から指定した名前の人がいるかどうかを調べています。「tanaka」はリストの中にあるのでTrueが返り、「takenaka」はリストの中にないので、Falseが返ります。
また、in演算子はタプルや辞書にも使うことができます。

tuple1 = ('tanaka', 'satou', 'suzuki', 'kimura')
dict1  = {'tanaka':21, 'satou':45, 'suzuki':19, 'kimura':67}
print('tanaka' in tuple1)
print('takenaka' in tuple1)
print('suzuki' in dict1)
print('suzumura' in dict1)

実行結果

True
False
True
False

タプルや辞書型の場合でも、リストの時と同じように使えます。ただし、辞書型の場合は指定したキーが存在するかどうかの確認になります。指定した要素が値にあったとしても、キーになかった場合はFalseが返されるので注意してください。

dict2  = {'tanaka':'tarou', 'suzuki':'zirou'}
print('tarou' in dict2)

実行結果

False

for文におけるin演算子

Pythonではfor文でもin演算子を使います。for文におけるinはリストやタプルから要素をひとつずつ取り出す働きをします。

list1  = ['tanaka', 'satou', 'suzuki', 'kimura']
for name in list1:
    print(name)

実行結果

tanaka
satou
suzuki
kimura

この例ではリストの中から要素を一ずつ取り出しています。タプルでも同様の結果になります。ただし、辞書の場合は通常はキーが取り出されます。

dict1  = {'tanaka':21, 'satou':45, 'suzuki':19, 'kimura':67}
for name in dict1:
    print('{0}:{1}'.format(name, dict1[name]))  #取り出したキーを使って値も表示

実行結果

tanaka:21
suzuki:19
satou:45
kimura:67

for文で辞書の値やキーと値の両方を取り出す場合は辞書型のvalues()およびitems()を使います。

dict1  = {'tanaka':21, 'satou':45, 'suzuki':19, 'kimura':67}
#値だけ取り出す
for age in dict1.values():
    print(age)
#キーと値を取り出す
for item in dict1.items():
    print(item)

実行結果

19
45
21
67
(‘suzuki’, 19)
(‘satou’, 45)
(‘tanaka’, 21)
(‘kimura’, 67)

not in演算子

in演算子によく似た演算子で、not in演算子があります。in演算子は探したい要素がリストやタプルに存在する場合にはTrue、存在しない場合にはFalseを返していました。not in演算子は名前の通りその逆で、存在しない場合にはTrue、存在する場合にはFalseを返します。

list1  = ['tanaka', 'satou', 'suzuki', 'kimura']
print('tanaka' not in list1)
print('takenaka' not in list1)

実行結果

False
True

リスト1には「tanaka」という名前があるので、not in演算子はFalseを返し、「takenaka」という名前はないので、not in演算子はTrueを返しています。inもnot inも似たような動きをしますが、「存在すること」を確認するときはin演算子、「存在しないこと」を確認するときはnot in演算子をつかうようにしましょう。

indexで指定した要素のインデックスを取得する

in演算子を使うことで、リストやタプルにその要素が存在するかどうかを確認することができました。しかし、これでは存在が分かってもリストのどこに存在するかが分かりません。そんなときはindex関数を使います。index関数の基本的な構文は以下の通りです。

リスト.index(探したい要素)

index関数を使えば、探したい要素がリストの何番目に存在するかを知ることができます。index関数はもし要素が見つからない場合はValueErrorが発生してしまうので、in演算子を使って存在することを確かめたうえでindex関数を使えば安心ですね。

list1 = ['tanaka', 'satou', 'suzuki', 'kimura']
name_index = 0
name = 'suzuki'
if(name in list1):
    name_index = list1.index(name)
    print('{0}は{1}番目に存在しています'.format(name, name_index))

実行結果

suzukiは2番目に存在しています

この例では、指定した要素(name)が存在する場合のみ、その要素のインデックスを取り出すようにしています。こうすることで、index関数がValueErrorを発生させることを防ぐことができます。
もちろん、例外処理をしたうえでindex関数単体を使っても良いですが、例外処理をするよりもこちらの方が簡単に済みますね。