Python list.index():要素の位置を検索する実践ガイド
Pythonリストは、整数、文字列、ブール値、ネストしたリストなど、あらゆるデータ型のアイテムを保持できる順序付きコレクションです。組み込みのlist.index()メソッドは、そのシーケンス内で要素の位置を特定する最も直接的な方法です。以下にステップバイステップのガイド、コードスニペット、要素が複数回出現する場合でもインデックスを取得する代替手法を示します。
list.index()の理解
list.index()メソッドは、指定した値が最初に出現する最小のインデックスを返します。値が存在しない場合ValueErrorを発生させます。詳細は公式Pythonドキュメントを参照。
構文
list.index(element, start=0, end=len(list))
パラメータ
| パラメータ | 説明 |
|---|---|
element | 検索対象の値。 |
start | 省略可。このインデックスから検索開始。デフォルトは0。 |
end | 省略可。このインデックスの直前まで検索。デフォルトはリストの長さ。 |
戻り値
最初に一致する要素の整数インデックスを返す。要素が存在しない場合ValueErrorを発生。
例:基本的な使い方
my_list = ['A', 'B', 'C', 'D', 'E', 'F']
print("Index of 'C':", my_list.index('C')) # 2
print("Index of 'F':", my_list.index('F')) # 5
例:startとendの使用
my_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print("Index of 'C' between 1 and 5:", my_list.index('C', 1, 5)) # 2
print("Index of 'F' between 3 and 7:", my_list.index('F', 3, 7)) # 5
print("Index of 'D' starting from 1:", my_list.index('D', 1)) # 3
例:要素が見つからない場合
my_list = ['A', 'B', 'C', 'D']
try:
my_list.index('Z')
except ValueError as e:
print(e) # 'Z' is not in list
繰り返し出現する要素の全インデックス取得
値が複数回出現する場合、list.index()は最初の位置のみ返します。以下は全インデックスを取得する複数のアプローチです。
forループを使用
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
indices = []
for i, val in enumerate(my_list):
if val == 'Guru':
indices.append(i)
print(indices) # [0, 3, 6]
whileループとindex()を使用
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
indices = []
next_index = -1
while True:
try:
next_index = my_list.index('Guru', next_index + 1)
indices.append(next_index)
except ValueError:
break
print(indices) # [0, 3, 6]
リスト内包表記
indices = [i for i, val in enumerate(my_list) if val == 'Guru'] print(indices) # [0, 3, 6]
enumerate()を使用
indices = [i for i, val in enumerate(my_list) if val == 'Guru'] print(indices) # [0, 3, 6]
filter()を使用
indices = list(filter(lambda i: my_list[i] == 'Guru', range(len(my_list)))) print(indices) # [0, 3, 6]
高度なテクニック
大規模データセットでのNumPy活用
数値や大量のテキストデータを扱う場合、リストをNumPy配列に変換すると検索が高速化されます。
pip install numpy import numpy as np my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] array = np.array(my_list) indices = np.where(array == 'Guru')[0] print(indices) # [0 3 6]
more_itertools.locate()
関数型アプローチでクリーンに書くなら、more_itertools.locate()が述語を満たすインデックスのイテレータを返します。
pip install more_itertools from more_itertools import locate indices = list(locate(my_list, lambda x: x == 'Guru')) print(indices) # [0, 3, 6]
重要なポイント
list.index()は値の最初の出現位置を求める最も直接的なメソッド。startとendパラメータで検索範囲を限定可能。- 要素が複数回出現する場合は、ループ、リスト内包表記、
enumerate()、filter()、NumPyやmore_itertoolsなどの外部ライブラリを活用して全インデックスを収集。 - 検索値が存在しない可能性がある場合は必ず
ValueErrorをハンドリング。
Python
- C++のstd::listをマスターする:構文、関数、実践例
- Python print()関数の実践ガイド:基本から応用まで
- Python strip()メソッド完全ガイド:実践例付き
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Python round()関数を実例で徹底解説
- Python map()関数をマスター:構文、例、ベストプラクティス
- Python timeit():実行時間測定の実例付きガイド
- Python collections.Counter:効率的なカウント、更新、演算操作
- Python list.count() 完全ガイド:実践例付きで徹底解説
- Pythonリストから重複要素を削除する方法:順序保持と効率のバランス
- Pythonリストから要素を削除する方法:remove()、pop()、clear()、del