Pythonリスト:.index() で要素の位置(インデックス)を検索する方法

Pythonのリスト(list)を操作する際、「特定の要素がリストのどの位置(インデックス)にあるか」を知りたい場合があります。例えば、「”admin” という権限がリストの何番目にあるか」を確認するようなケースです。

このような検索には、リストの .index() メソッドを使用します。

この記事では、.index() メソッドの基本的な使い方と、使用する上での重要な注意点(重複する値、存在しない値)について解説します。

目次

.index() メソッドの基本的な使い方

.index() メソッドは、引数に指定した値がリスト内で最初に見つかった位置のインデックス(0から始まる番号)を返します。

構文:

リスト変数.index(探したい値)

使用例:

# サーバーの役割リスト
server_roles = ["auth-server", "db-server", "app-server", "log-server"]
# インデックス:       0              1             2              3

# "app-server" がどの位置にあるかを検索
try:
    position = server_roles.index("app-server")
    print(f"'app-server' はインデックス {position} に見つかりました。")

except ValueError:
    print("'app-server' はリスト内に存在しませんでした。")

実行結果:

'app-server' はインデックス 2 に見つかりました。

注意点1:重複する要素がある場合

探したい値がリスト内に複数存在する場合、.index() メソッドは**最初に見つかった要素(インデックスが最も若い要素)**の位置のみを返します。2番目以降のインデックスは返しません。

# システムログのステータスリスト
log_statuses = ["OK", "OK", "ERROR", "OK", "TIMEOUT"]

# "OK" を検索
first_ok_index = log_statuses.index("OK")

print(f"最初に見つかった 'OK' の位置: {first_ok_index}")

実行結果:

最初に見つかった 'OK' の位置: 0

インデックス 13 にも "OK" がありますが、最初に見つかったインデックス 0 のみが返されます。

注意点2:要素が存在しない場合(ValueError

.index() メソッドの最も重要な注意点は、引数に指定した値がリスト内に一つも存在しない場合、ValueError というエラーが発生し、プログラムが停止することです。

# サーバーの役割リスト
server_roles = ["auth-server", "db-server", "app-server"]

# リストに存在しない "cache-server" を検索しようとする
try:
    pos = server_roles.index("cache-server")
    print(f"位置: {pos}")
except ValueError as e:
    print(f"エラーが発生しました: {e}")

実行結果:

エラーが発生しました: 'cache-server' is not in list

安全な検索方法 (in 演算子との併用)

ValueError を避けて安全に要素の位置を検索するには、先に in 演算子を使って、その要素がリストに存在するかどうかを確認するのが一般的です。

target_role = "db-server"
target_role_unknown = "cache-server"

def find_index_safely(roles, target):
    """
    in 演算子で存在確認してから .index() を呼ぶ
    """
    if target in roles:
        position = roles.index(target)
        print(f"'{target}' はインデックス {position} に存在します。")
    else:
        print(f"'{target}' はリスト内に見つかりませんでした。")

# 実行
find_index_safely(server_roles, target_role)
find_index_safely(server_roles, target_role_unknown)

実行結果:

'db-server' はインデックス 1 に存在します。
'cache-server' はリスト内に見つかりませんでした。

in 演算子で事前チェックを行うことで、ValueError を回避し、プログラムを安全に実行できます。

まとめ

  • リスト内の要素の位置(インデックス)を検索するには、.index(値) メソッドを使用します。
  • 値が重複している場合は、最初に見つかったインデックスのみを返します。
  • 値がリスト内に存在しない場合、ValueError が発生します。
  • エラーを避けるため、if 値 in リスト: のように in 演算子で存在を確認してから .index() を呼び出す方法が安全です。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次