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つのインデックスしか返しません。複数の出現箇所をすべて取得したい場合は、本記事で紹介した方法を活用してください。
-
Pythonでリストを拡張する5つの方法を徹底解説
リストはPythonで最もよく使われるデータ構造です。既存のリストに新しい要素を追加して「拡張」したい場面は非常に多くありますが、その実現方法は1つだけではありません。本記事では、それぞれ特徴の異なる5つの手法を、実際のコード例と実行結果とともにわかりやすく解説します。1. +演算子を使う方法最も直感的なのが+演算子によるリストの連結です。変数に値を代入し直す感覚と同じように、新しいリストの要素を既存のリストに追加できます。サンプルコードlist = [Mon,Tue,Wed] list = list + [Thu,Fri] print(list)実行結果上記のコードを実行すると、次の出力が得
-
Pythonでリストの平均値を求める方法
Pythonには、複数の要素の合計を簡単に計算できる組み込み関数 sum() が用意されています。ここでは、この関数を使ってリスト内のすべての数値の合計を求め、その後、合計を要素数で割ることで平均値を計算します。 アルゴリズム ステップ1:「リストのサイズ」を入力する ステップ2:「要素」を入力する ステップ3:sum関数を使用して、すべての数値の合計を計算する ステップ4:平均値を計算する サンプルコード # リストの平均値を求める A=list() n=int(input(Enter the size of the List ::)) print(Enter the number :