ホーム テクノロジー 開発 非公開: Python リスト内の項目のインデックスを検索する方法

Python リスト内の項目のインデックスを検索する方法

Python リスト内の項目のインデックスを検索する方法

このガイドでは、単純な反復と組み込みリスト メソッド 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() 関数を使用して、イテラブルをループするときにインデックスを取得できます。

: 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 リストの基本を説明したので、リスト内の項目のインデックスを検索する方法を学びましょう。

Python-リスト内検索
Python-リスト内検索
Python リスト内の項目のインデックスを検索する方法
Python リスト内の項目のインデックスを検索する方法

for ループを使用した反復によるリスト項目のインデックスの検索

前のセクションのリスト fruits を考えてみましょう。 for ループを使用した反復によって、このリスト内の特定の項目のインデックスを検索する方法を学びます。

for ループと range() 関数の使用

target : リスト内で検索している値を修正しましょう。

for ループと range() 関数を使用して、 0 から len(fruits) - 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

ここで、 enumerate() 関数を使用してリスト内の項目のインデックスを見つけるように Python 関数を書き直してみましょう。

 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 リスト内の項目のインデックスを検索する方法
Python リスト内の項目のインデックスを検索する方法

リスト内包表記を使用した反復によるリスト項目のインデックスの検索

Python のリスト内包表記を使用すると、何らかの条件に基づいて既存のリストからリストを作成できます。一般的な構成は次のとおりです。

 new_list = [<output> for <items in existing iterables> if <condition is true>] 

以下の図は、リスト内包表記の要素を識別する方法を示しています。これを使用すると、関数 find_in_list リスト内包表記に変換できます。

Python-リスト内検索
Python-リスト内検索

上記を使用して、ターゲットインデックスを作成するためのリスト内包の式は次のようになります。

 target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

演習として、他のいくつかの例について上記のコード スニペットを実行してみることができます。

Python リスト内の項目のインデックスを検索する方法
Python リスト内の項目のインデックスを検索する方法

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 番目に出現する mango のインデックスを取得するには、以下に示すように、インデックス 2 から開始してインデックス 5 までリスト スライスを検索します。

 fruits.index(target,2,5)
4

Python で ValueError を処理する方法

ここで、リストに存在しない項目 (たとえば '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-excel ブロッ​​クを使用すると、 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) は、 list 内で最初に出現する value のインデックスを返します。値が存在しない場合は、 ValueError が発生します。
  • list.index(value, start, end) を使用してリストの特定のスライスを検索し、リスト スライス [start:end-1] 内の値の出現を検索できます。

次に、Python 辞書をキーまたは値で並べ替える方法を学びます。 Python プログラミングを楽しんでください!

「 Python リスト内の項目のインデックスを検索する方法」についてわかりやすく解説!絶対に観るべきベスト2動画

【Python入門・応用】06.リスト|要素へのアクセス方法、追加や削除の仕方を学習しよう(初心者〜中級者向け)
【毎日Python】Pythonで文字列やリスト、データフレームからインデックスを指定して値を取得する方法|スライス操作
Share via
Copy link