index(リスト、配列)
このページでは豊富な例を用いてPythonの リストクラス のindexメソッドの使い方を学ぶことができます。
indexメソッドは
リストクラス(list)
のメソッドの1つです。
引数で指定した値がリストの中に含まれている場合、最初に一致する要素のインデックスを戻り値として返します。
また、任意である第2引数、第3引数を指定することで検索範囲を指定することもできます。
TL;DR
基本
# 引数で与えた値と一致する要素のインデックスを返す
list1 = [1, 2, 3, 4, 5]
return_value1 = list1.index(3)
print(return_value1)
==> 2
print(type(return_value1))
==> <class 'int'>
# 複数一致する要素がある場合
# 最初に一致した要素のインデックスのみが戻り値
list2 = [True, True, False, False]
return_value2 = list2.index(False)
print(return_value2)
==> 2
list3 = [{'name': 'Larry'}, {'name': 'Steve'}, {'name': 'Sergey'}]
dict1 = {'name': 'Sergey'}
print(list3.index(dict1))
==> 2
# 一致する要素がない場合
list4 = ['Python', 'JavaScript', 'Golang']
list4.index('Java')
==> ValueError: 'Java' is not in list
# 例外処理との組み合わせ
list4 = ['Python', 'JavaScript', 'Golang']
try:
return_value3 = list4.index('Java')
except ValueError:
print('list4 does not have Java.')
==> list4 does not have Java.
# ifを用いた処理
list5 = [100, 200, 300, 400, 500]
target_value = 200
return_value4 = -1
# list5の中にtarget_valueが含まれる場合のみindexメソッドが実行される
if target_value in list5:
return_value4 = list5.index(target_value)
print(return_value4)
==> 1
# 最も大きい値の要素のインデックスを求める
list6 = [3, 1, 4, 8, 2]
return_value5 = list6.index(max(list6))
print(return_value5)
==> 3
関連情報:type(組み込み関数)の使用方法
関連情報:max(組み込み関数)の使用方法
関連情報:例外処理(try,except,else,finally)の使用方法
検索範囲の指定
# 第2引数を指定して検索範囲を指定する
list1 = [1, 2, 3, 1, 2, 3]
return_value1 = list1.index(1)
# インデックスが1の要素から検索される
return_value2 = list1.index(1, 1)
print(return_value1)
==> 0
print(return_value2)
==> 3
# 指定した範囲はスライス表記で以下と同じ
print(list1[1:])
==> [2, 3, 1, 2, 3]
# 第2、第3引数を指定して検索範囲を指定する
list2 = ['py', 'js', 'ts', 'java', 'py', 'golang', 'py']
return_value3 = list2.index('py', 2, 5)
print(return_value3)
==> 4
# 指定した範囲はスライス表記で以下と同じ
print(list2[2:5])
==> ['ts', 'java', 'py']
一致する要素すべてのインデックスを取得
# indexメソッドを使用する方法
list1 = [1, 2, 3, 1, 2, 3]
target_value = 1
i = 0
index_list = []
while target_value in list1[i:]:
i = list1.index(target_value, i)
index_list.append(i)
i += 1
print(index_list)
==> [0, 3]
# リスト内包表記を使用する方法
list1 = [1, 2, 3, 1, 2, 3]
target_value = 1
index_list = [i for i, v in enumerate(list1) if v == target_value]
print(index_list)
==> [0, 3]
関連情報:whileの使用方法
関連情報:ifの使用方法
関連情報:forの使用方法
解説
基本
indexメソッドは引数に指定した値が呼び出し元のリストに含まれている場合に、一致した要素のインデックスを戻り値として返します。
一致する要素が複数含まれている場合は、最初に一致した要素のインデックス(最も値が小さいインデックス)が戻り値となります。
引数に指定した値が呼び出し元のリストに含まれていない場合は、ValueError
が起こります。
処理を継続させたい場合は例外を適切に処理してください。
list1 = ['py', 'js', 'ts', 'java']
return_value1 = list1.index('js')
print(return_value1)
==> 1
print(type(return_value1))
==> <class 'int'>
# 複数一致する要素がある場合
list2 = [1, 2, 3, 1, 2, 3]
print(list2.index(3))
==> 2
# 一致する要素がない場合
list3 = [True, True, True]
list3.index(False)
==> ValueError: False is not in list
# 例外処理との組み合わせ
list3 = [True, True, True]
try:
list3.index(False)
except ValueError:
print('No False')
==> No False
関連情報:type(組み込み関数)の使用方法
関連情報:例外処理(try,except,else,finally)の使用方法
検索範囲の指定
indexメソッドの第2引数と第3引数は任意ですが、指定することで第1引数で与えた値を検索する範囲を決めることができます。
第2引数には検索をスタートするインデックスを、第3引数には検索を終了するインデックスを指定します。
第2引数と第3引数で指定する範囲は、スライス表記でlist[第2引数:第3引数]
と記述した際の値と同じ範囲になります。
第2引数以降を指定した際の注意点は、戻り値として返ってくるインデックスの値が検索範囲内でのインデックスではないことです。 検索範囲を指定しても、元のリストにおけるインデックスが返ってくることに気をつけてください。
list1 = [100, 200, 300, 100, 200, 300]
return_value1 = list1.index(100)
# インデックスが2の要素から検索される
return_value2 = list1.index(100, 2)
print(return_value1)
==> 0
print(return_value2)
==> 3
# 指定した範囲はスライス表記で以下と同じ
print(list1[2:])
==> [300, 100, 200, 300]
# 第2、第3引数を指定して検索範囲を指定する
list2 = ['A', 'B', 'C', 'A', 'B', 'C', 'A']
return_value3 = list2.index('A', 2, 5)
print(return_value3)
==> 3
# 指定した範囲はスライス表記で以下と同じ
print(list2[2:5])
==> ['C', 'A', 'B']
一致する要素すべてのインデックスを取得
indexメソッドは指定した値と最初に一致する要素のインデックスを戻り値として返します。
一致する要素すべてのインデックスを得たい場合は工夫する必要があります。
このページではindexメソッドを使用してすべてのインデックスを取得する例として
while文を使用する方法
をあげています。
しかし、同様の処理を実現する場合はリスト内包表記を用いて記述したほうがシンプルになることもあります。
用途に合わせ適切な方法を選択してください。
# indexメソッドを使用する方法
list1 = ['A', 'B', 'C', 'A', 'B', 'C']
target_value = 'B'
index = 0
index_list = []
while target_value in list1[index:]:
index = list1.index(target_value, index)
index_list.append(index)
index += 1
print(index_list)
==> [1, 4]
# リスト内包表記を使用する方法
list1 = ['A', 'B', 'C', 'A', 'B', 'C']
target_value = 'B'
index_list = [i for i, v in enumerate(list1) if v == target_value]
print(index_list)
==> [1, 4]
関連情報:ifの使用方法
関連情報:forの使用方法