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

Pythonでリスト間の一致する要素のインデックスを取得する方法

Pythonでは、2つのリストが与えられたときに、1つ目のリストの中から「2つ目のリストの要素と値が一致する要素」のインデックス(位置)を取得したいケースがあります。例えば、曜日のリストから特定の曜日が何番目に位置するかを調べるような場面です。

本記事では、この処理を実現する代表的な2つの方法を、サンプルコードと実行結果とともに解説します。

方法1:index()メソッドを使う

最もシンプルなのが、リストのindex()メソッドを活用する方法です。2つ目のリストの各要素について、1つ目のリスト内での位置を順番に取得し、リスト内包表記でまとめます。

サンプルコード

listA = ['Mon','Tue', 'Wed', 'Thu', 'Fri']
listB = ['Tue', 'Fri']

# 与えられたリスト
print("与えられたリスト:\n ",listA)
print("検索対象の値のリスト:\n ",listB)

# index()メソッドでインデックスを取得
res = [listA.index(i) for i in listB]

# 結果を出力
print("一致したインデックスのリスト : ",res)

実行結果

与えられたリスト:
['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
検索対象の値のリスト:
['Tue', 'Fri']
一致したインデックスのリスト : [1, 4]

この例では、「Tue」は1番目(インデックス1)、「Fri」は4番目(インデックス4)に存在するため、結果として [1, 4] が得られます。

なお、index()メソッドは最初に見つかった位置のみを返すため、1つ目のリスト内に重複した値がある場合は注意が必要です。

方法2:enumerate()とset()を組み合わせる

もう1つの方法は、enumerate()関数とset()を組み合わせるアプローチです。enumerate()で1つ目のリストの全要素とそのインデックスを取り出しながらループし、その値が2つ目のリスト(set化したもの)に含まれているかどうかを判定します。条件に合致した要素のインデックスだけを抽出できます。

サンプルコード

listA = ['Mon','Tue', 'Wed', 'Thu', 'Fri']
listB = ['Tue', 'Fri']

# 与えられたリスト
print("与えられたリスト:\n ",listA)
print("検索対象の値のリスト:\n ",listB)

# enumerate()でインデックスと値を取得し、setで判定
res = [key for key, val in enumerate(listA)
if val in set(listB)]

# 結果を出力
print("一致したインデックスのリスト : ",res)

実行結果

与えられたリスト:
['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
検索対象の値のリスト:
['Tue', 'Fri']
一致したインデックスのリスト : [1, 4]

こちらの方法も同じく [1, 4] という結果になります。enumerate()を使うことで、リスト全体を走査できるため、1つ目のリストに重複する値が含まれていても、すべての一致箇所のインデックスを取得できる点が特徴です。

まとめ

  • index()メソッド:コードが簡潔だが、重複する値がある場合は最初の一致位置のみ返される。
  • enumerate() + set():リスト全体を走査でき、すべての一致インデックスを抽出可能。setによる判定は高速。

用途やデータの特性に応じて、適切な方法を選択するとよいでしょう。

  1. 【初心者向け】Pythonでリストのサイズ(要素数)を取得する方法

    組み込み関数 len() を使ったリストのサイズ取得Pythonでは、組み込み関数 len() を使うことで、リストをはじめとするシーケンス型オブジェクトに含まれる要素の数を簡単に取得できます。>>> L1 = [1, 2, 3, 4, 5]>>> len(L1)5上記の例では、リスト L1 に含まれる要素数「5」が返されます。len() 関数はリストだけでなく、タプル、文字列、辞書など、さまざまなシーケンス型やコレクション型に対しても共通して使用できるため、Pythonプログラミングにおける最も基本的なテクニックの一つです。__len__() メソッドとの

  2. 【Python入門】リストのリスト(ネストしたリスト)の長さを取得する方法

    はじめにPythonでは、リストの中にさらにリストが格納された「ネストしたリスト(リストのリスト)」を扱うことがよくあります。このようなデータ構造の全要素数を取得したい場合、いくつかの方法があります。本記事では、代表的な手法をわかりやすく解説します。方法1:ネストしたループで要素をカウントする最も基本的な方法は、二重のforループを使って各サブリストの要素を順番に数えていくことです。>>> a = [[1, 2, 3], [4, 5, 6]]>>> c = 0>>> for x in a:... for y in x:...