Python でリスト内の要素のすべてのインデックスを検索する

Manav Narula 2023年1月30日
  1. for ループを使った要素のインデックスを求める
  2. Python で要素の全出現数のインデックスを検索するには numpy.where() 関数を使用する
  3. more_itertools.locate() 関数を用いて、ある要素のすべての出現位置のインデックスを検索する
Python でリスト内の要素のすべてのインデックスを検索する

リストは、Python で複数の要素を一つの名前の下に格納するために使用されます。各要素はリスト内の位置を使ってアクセスすることができます。1つの要素はリスト内の複数の位置に存在することができます。

このチュートリアルでは、リスト内の特定の要素のすべての出現位置のインデックスを見つける方法を紹介します。次のリストを使って、要素 1 のインデックスをすべて見つけます。

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

for ループを使った要素のインデックスを求める

リストを簡単に繰り返し、各要素を必要な要素と比較してインデックスを見つけることができます。最終的な結果を新しいリストに格納することができます。次の例では、range() 関数を用いてリストを繰り返します。

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = []
x = 1  # The required element

for i in range(len(l1)):
    if l1[i] == x:
        pos.append(i)
print(pos)

出力:

[0, 2, 8]

上記のコードを実装するより効率的でコンパクトな方法は、以下のリスト内包を使用することです。

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

pos = [i for i in range(len(l1)) if l1[i] == 1]
print(pos)

出力:

[0, 2, 8]

同様に、enumerate() 関数を使用して、インデックスと値を一緒に返すこともできます。例えば、

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = [i for i, x in enumerate(l1) if x == 1]
print(pos)

出力:

[0, 2, 8]

Python で要素の全出現数のインデックスを検索するには numpy.where() 関数を使用する

ライブラリ NumPy には where() 関数があり、これはある条件に基づいて配列の要素のインデックスを返すのに使われます。このメソッドでは、リストを配列として渡さなければなりません。最終的な結果も配列になります。次のコードスニペットは、このメソッドの使用方法を示しています。

import numpy as np

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

pos = np.where(np.array(l1) == 1)[0]

print(pos)

出力:

[0 2 8]

more_itertools.locate() 関数を用いて、ある要素のすべての出現位置のインデックスを検索する

more_itertools はサードパーティの便利なモジュールです。このモジュールには多くの関数があり、イテレーションを扱う際に効率的でコンパクトなコードを作成することができます。このモジュールの locate() 関数は、条件に合致する要素のインデックス True を返します。これは itertools オブジェクトを返します。以下のコードスニペットは、このメソッドの使用方法を説明しています。

from more_itertools import locate

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

pos = list(locate(l1, lambda x: x == 1))

print(pos)

出力:

[0, 2, 8]

最終的な結果がリストの形になるように list() 関数を利用します。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python List