Python でリスト内の要素のインデックスを検索する
このチュートリアルでは、Python リストで要素の位置またはインデックスを見つける方法を示します。
Python でリスト index()
メソッドを使用してリストのインデックスを検索する
Python リストには、index()
と呼ばれる組み込みメソッドがあります。このメソッドは、既存のリスト内で検索する値を表す単一のパラメーターを受け入れます。この関数は、リスト内での出現回数に関係なく、インデックス 0
から始まる最初の出現のインデックスを返します。
たとえば、繰り返し値が 20
のリストを宣言し、関数 index(20)
を呼び出して、返されるものを出力します。
lst = [13, 4, 20, 15, 6, 20, 20]
print(lst.index(20))
出力:
2
lst
配列内で最初に見つかった値 20
は、関数呼び出しの結果であるインデックス 2
にありました。同じ値を持つ他の要素は、リスト内ですでに一致するものが見つかっているため、無視されます。
指定されたリスト内に値が存在せず、存在しない値を渡す index()
を呼び出すとどうなりますか?これを例にとってみましょう。
lst = [13, 4, 20, 15, 6, 20, 20]
print(lst.index(21))
出力:
ValueError: 21 is not in list
リスト内にインデックスが見つからない場合、関数はエラーをスローします。場合によっては、これはエラーを呼び出すのに好ましくない可能性があります。これを回避するには、try...except
ブロックでエラーをキャッチし、インデックスがリスト内に存在しない場合は -1
として割り当てるようにします。
lst = [13, 4, 20, 15, 6, 20, 20]
try:
ndx = lst.index(21)
except:
ndx = -1
print(ndx)
出力:
-1
このように、明示的なエラーを呼び出す必要はなく、プログラムは操作後も実行を継続できます。
Python で numpy.where()
を使用してリストのインデックスを検索する
NumPy
モジュールには、where()
と呼ばれる事前定義された関数があり、リストし、条件を受け入れます。
この場合、where()
を排他的に使用して、特定の値のインデックスを検索します。組み込みの index()
関数とは異なり、where()
関数は、値がリスト内に複数回存在する場合に、値が配置されているインデックスのリストを返すことができます。これは、最初のオカレンスだけでなく、値のすべてのオカレンスが必要な場合に役立ちます。
最初のステップは、Python リストを NumPy
配列に変換することです。これを行うには、関数 np.array()
を呼び出します。
import numpy as np
lst = np.array(lst=[13, 4, 20, 15, 6, 20, 20])
NumPy
配列を初期化した後、where()
の最初のパラメーターを入力するだけで済みます。最初のパラメーターを lst == 20
として初期化し、値 20
で指定されたリストのインデックスを見つけます。
import numpy as np
lst = [13, 4, 20, 15, 6, 20, 20]
lst = np.array(lst)
result = np.where(lst == 20)
print(result)
出力:
(array([2, 5, 6]),)
NumPy
は主に行列を扱うため、where()
関数は単一のリストではなく配列のタプルを返します。単一のリストのみを出力することが望ましい場合は、結果の最初のインデックスを呼び出し、print()
を使用して出力します。
import numpy as np
lst = [13, 4, 20, 15, 6, 20, 20]
lst = np.array(lst)
result = np.where(lst == 20)
print(result[0])
出力:
[2 5 6]
NumPy
配列は、通常のコンマではなく、単一の空白で区切られていることに注意してください。
要約すると、index()
関数は、Python リスト内の要素の位置を見つける最も簡単な方法です。ただし、この関数は、指定された値が最初に出現するインデックスのみを返します。
値のインスタンスが複数存在する場合に複数のインデックスを返すには、NumPy
モジュールの where()
関数を使用することを選択できます。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn