Pythonリストでアイテムのインデックスを見つける方法
公開: 2022-06-29このガイドでは、単純な反復と組み込みのリストメソッドindex()の両方を使用して、Pythonリスト内の要素のインデックスを見つける方法を学習します。
Pythonリストを操作する場合、特定のアイテムが発生するインデックスを見つける必要がある場合があります。 これは次の方法で実行できます。
- リストをループして、現在のインデックスのアイテムが特定の値と等しいかどうかを確認します
- 組み込みのリストメソッド
index()
を使用する
このチュートリアルでは、上記の両方を学習します。 始めましょう。
Pythonリスト、再考
Pythonでは、リストは同じまたは異なるデータ型のアイテムのコレクションです。 それらは変更可能です; 新しいリストを作成しなくても、その場で変更できます。
このfruits
の例を考えてみましょう:5つの異なる果物のリスト。
fruits = ["apple","mango","strawberry","pomegranate","melon"]
組み込みのlen()
関数を使用して、Pythonオブジェクトの長さを取得できます。 したがって、以下に示すように、リストオブジェクト( fruits
)を引数としてlen()
関数を呼び出して、その長さを取得できます。
len(fruits) # Output: 5
このチュートリアルでは、実行例としてfruits
リストを使用します。
Pythonリストでのインデックス作成
Pythonはゼロインデックスに従います。 したがって、Pythonイテレータでは、最初の項目はインデックス0にあり、2番目の項目はインデックス1にあります。 イテレータの長さがk
の場合、最後の項目はインデックスk - 1
にあります。
Pythonでは、範囲()関数を使用して、反復可能オブジェクトをループするときにインデックスを取得できます。
注:
range(k)
をループすると、インデックス0,1,2、…、(k-1)が得られます。 したがって、k = len(list)
を設定することにより、すべての有効なインデックスのリストを取得できます。
次のコードセルはこれを説明しています。
for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon
Pythonリストの基本について説明したので、リスト内のアイテムのインデックスを見つける方法を学びましょう。

forループを使用した反復によるリストアイテムのインデックスの検索
前のセクションのfruits
のリストを考えてみましょう。 for
ループを使用して反復処理することにより、このリスト内の特定のアイテムのインデックスを見つける方法を学習します。
forループとrange()関数の使用
target
を修正しましょう:リストで検索している値。
for
ループとrange()
関数を使用して、 0
からlen(fruits) - 1
-1までのインデックスのリストを取得できます。
- 各インデックスにアクセスする果物のリストをループします。
- 現在のインデックスiのアイテムがターゲットと等しいかどうかを確認します。
-
True
の場合、target
がインデックスi
で見つかったことを出力します。
fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1
この例では、ターゲット文字列'mango'
がfruits
リストに1回だけ(インデックス1で)表示されます。
ただし、目標値が複数回表示されたり、まったく表示されなかったりする場合があります。 これらのケースを処理するために、上記のループを変更して、 find_in_list
という関数内にコンテンツをラップしてみましょう。
関数定義を理解する
関数find_in_list
には、次の2つのパラメーターがあります。
-
target
:検索している値、および py_list
:検索しているPythonリスト。
def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
関数本体で、空のリストtarget_indices
を初期化します。 リストをループして、リストアイテムにアクセスします。 ターゲットが特定のインデックスで見つかった場合は、 append()
メソッドを使用してそのインデックスをtarget_indices
リストに追加します。
注:Pythonでは、
list.append(item)
はlist
の最後にitem
を追加します。
- ターゲットが見つからない場合、
target_indices
は空のリストです。 ターゲットがリストに存在しないことがユーザーに通知されます。 - ターゲットが複数のインデックスで見つかった場合、
target_indices
にはそれらすべてのインデックスが含まれます。
次に、示されているようにfruits
リストを再定義しましょう。
今回は、インデックス1と4で2回発生するtarget
文字列'mango'
を検索しています。
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]
target
とfruits
を引数として関数find_in_list
を呼び出すと、両方のインデックスが返されることがわかります。
target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!
fruits
リストにない'turnip'
を検索しようとすると、ターゲットが見つからないというメッセージが表示されます。
forループとenumerate()関数の使用
Pythonでは、 enumerate()
関数を使用して、 range()
関数を使用せずに、インデックスとアイテムの両方に同時にアクセスできます。
次のコードセルは、 enumerate()
関数を使用してインデックスとアイテムの両方を取得する方法を示しています。
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon
それでは、Python関数を書き直して、 enumerate()
関数を使用してリスト内のアイテムのインデックスを見つけましょう。

def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
前のセクションと同様に、有効な引数を使用してfind_in_list
関数を呼び出すことができます。
上記の関数定義を同等のリスト内包表記に変換できます。これについては、次のセクションで行います。
リスト内包表記を使用した反復によるリストアイテムのインデックスの検索
Pythonのリスト内包表記を使用すると、特定の条件に基づいて既存のリストからリストを作成できます。 一般的な構成は次のとおりです。
new_list = [<output> for <items in existing iterables> if <condition is true>]
次の図は、リスト内包の要素を識別する方法を示しています。 これを使用して、関数find_in_list
をリスト内包に変換できます。

以上を踏まえると、ターゲットインデックスを作成するためのリスト内包表記の式は次のようになります。
target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]
演習として、他のいくつかの例について、上記のコードスニペットを実行してみることができます。
index()メソッドを使用してリストアイテムのインデックスを検索する
Pythonリスト内のアイテムのインデックスを見つけるには、組み込みの.index()
メソッドを使用することもできます。 一般的な構文は次のとおりです。
list.index(value,start,end)
上記の方法の解析:
-
value
は、検索しているターゲット値です。 -
start
とend
はオプションの位置引数です。 それらを使用して、リストスライス内のアイテムのインデックスをstart
からend - 1
。
注: .index()メソッドは、
list
内で最初に出現するvalue
のインデックスのみを返します。 リストスライス[start:end-1]でアイテムのインデックスが見つかった場合でも、このメソッドはアイテムの最初の出現に対応するインデックスのみを返します。
.index()
メソッドがどのように機能するかを理解するために、例をもう一度見てみましょう。
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1
fruits
リストに'mango'
が2回出現しているにもかかわらず、最初の出現のインデックスのみが返されていることがわかります。
2番目に出現するマンゴーのインデックスを取得するには、以下に示すように、インデックス2からインデックス5までのリストスライスを検索します。
fruits.index(target,2,5) 4
PythonでValueErrorsを処理する方法
次に、リストに存在しないアイテムのインデックス(たとえば、 'carrot'
)を見つけようとするとどうなるかを見てみましょう。
target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list
上記のコードセルに見られるように、これはValueErrorをスローします。 Pythonでは、 try
ブロックとexcept
ブロックを使用して、これを例外として処理できます。
try-except
を使用する一般的な構文は次のとおりです。
try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception
上記のtry-exceptブロックを使用すると、 ValueErrorを例外として処理できます。
target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list
上記のコードは次のことを行います。
- ターゲットがリストに存在する場合、ターゲットのインデックスを返します。
- ターゲットが存在しない場合、ターゲットはValueErrorを例外として処理し、エラーメッセージを出力します。
まとめ
Pythonリストでアイテムのインデックスを見つけるために学習したさまざまな方法の概要を次に示します。
- Pythonのforループとrange()関数を使用して、アイテムとそれぞれのインデックスを取得できます。 インデックスの項目がターゲットと一致するかどうかを確認します。
- enumerate()関数を使用して、アイテムとインデックスに同時にアクセスすることもできます。
- リスト内包表記式内で上記の両方のメソッドを使用できます。
- リスト内のアイテムのインデックスを検索するには、組み込みの.index()メソッドを使用することもできます。
- list.index(value)は、リスト内で最初に出現する値のインデックスを返します。 値が存在しない場合は、 ValueErrorが発生します。
- list.index(value、start、end)を使用してリストの特定のスライスを検索し、リストスライス[start:end-1]内の値の出現を検索できます。
次に、Pythonディクショナリをキーまたは値で並べ替える方法を学びます。 ハッピーPythonプログラミング!