Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでリスト内の値のインデックスを見つける方法【複数の出現位置も一括取得】

Pythonでプログラミングをしていると、リスト内の特定の値がどのインデックス(位置)にあるのかを調べたい場面がよくあります。標準の index() メソッドを使えば最初に見つかった位置を取得できますが、値がリスト内に複数回出現する場合、そのすべてのインデックスを取得したいこともあります。

本記事では、特定の値が出現するすべてのインデックスを取得できる4つの方法を、サンプルコードとともにわかりやすく解説します。

方法1:filter() 関数を使う

filter() 関数と lambda 式を組み合わせると、条件に一致する要素のインデックスだけを抽出できます。

# filter() を使用して値「3」のインデックスを検索

# リストの初期化
test_list = [1, 3, 4, 3, 6, 7]

# 元のリストを表示
print("Original list : " + str(test_list))

# filter() で値が3のインデックスを抽出
res_list = list(filter(lambda x: test_list[x] == 3, range(len(test_list))))

# 結果のリストを表示
print("New indices list : " + str(res_list))

方法2:enumerate() 関数を使う

enumerate() を使うと、インデックスと値を同時に取り出しながら処理できるため、可読性の高いコードになります。Pythonらしい書き方として特におすすめの方法です。

# enumerate() を使用して値「3」のインデックスを検索

# リストの初期化
test_list = [1, 3, 4, 3, 6, 7]

# 元のリストを表示
print("Original list : " + str(test_list))

# enumerate() で値が3のインデックスを抽出
res_list = [i for i, value in enumerate(test_list) if value == 3]

# 結果のリストを表示
print("New indices list : " + str(res_list))

方法3:リスト内包表記を使う

リスト内包表記と range() を組み合わせる方法です。インデックスを直接操作したい場合に便利で、簡潔に記述できます。

# リスト内包表記を使用して値「3」のインデックスを検索

# リストの初期化
test_list = [1, 3, 4, 3, 6, 7]

# 元のリストを表示
print("Original list : " + str(test_list))

# リスト内包表記で値が3のインデックスを抽出
res_list = [i for i in range(len(test_list)) if test_list[i] == 3]

# 結果のリストを表示
print("New indices list : " + str(res_list))

方法4:forループを使う(素朴な方法)

初心者にも理解しやすい、基本的な for ループによる方法です。各要素を先頭から順番にチェックし、一致したインデックスを空のリストへ追加していきます。

# forループを使用して値「3」のインデックスを検索

# リストの初期化
test_list = [1, 3, 4, 3, 6, 7]

# 元のリストを表示
print("Original list : " + str(test_list))

# forループで値が3のインデックスを抽出
res_list = []
for i in range(0, len(test_list)):
    if test_list[i] == 3:
        res_list.append(i)

# 結果のリストを表示
print("New indices list : " + str(res_list))

実行結果

いずれの方法でも同じ結果が得られます。サンプルのリストでは値「3」がインデックス1と3の2箇所に出現しているため、両方のインデックスが取得されます。

Original list : [1, 3, 4, 3, 6, 7]
New indices list : [1, 3]

まとめ

リスト内の特定の値のすべてのインデックスを取得するには、主に以下の4つの方法があります。

  • filter() + lambda:関数型プログラミング的なアプローチ
  • enumerate():Pythonicで可読性が高く、実務でも人気(推奨)
  • リスト内包表記:短いコードで簡潔に書ける
  • forループ:処理の流れが直感的で初心者向け

なお、index() メソッドは最初に見つかった1つのインデックスしか返しません。複数の出現箇所をすべて取得したい場合は、本記事で紹介した方法を活用してください。

  1. Pythonでリストを拡張する5つの方法を徹底解説

    リストはPythonで最もよく使われるデータ構造です。既存のリストに新しい要素を追加して「拡張」したい場面は非常に多くありますが、その実現方法は1つだけではありません。本記事では、それぞれ特徴の異なる5つの手法を、実際のコード例と実行結果とともにわかりやすく解説します。1. +演算子を使う方法最も直感的なのが+演算子によるリストの連結です。変数に値を代入し直す感覚と同じように、新しいリストの要素を既存のリストに追加できます。サンプルコードlist = [Mon,Tue,Wed] list = list + [Thu,Fri] print(list)実行結果上記のコードを実行すると、次の出力が得

  2. Pythonでリストの平均値を求める方法

    Pythonには、複数の要素の合計を簡単に計算できる組み込み関数 sum() が用意されています。ここでは、この関数を使ってリスト内のすべての数値の合計を求め、その後、合計を要素数で割ることで平均値を計算します。 アルゴリズム ステップ1:「リストのサイズ」を入力する ステップ2:「要素」を入力する ステップ3:sum関数を使用して、すべての数値の合計を計算する ステップ4:平均値を計算する サンプルコード # リストの平均値を求める A=list() n=int(input(Enter the size of the List ::)) print(Enter the number :