Python でリスト内の要素のすべてのインデックスを検索する
-
for
ループを使った要素のインデックスを求める -
Python で要素の全出現数のインデックスを検索するには
numpy.where()
関数を使用する -
more_itertools.locate()
関数を用いて、ある要素のすべての出現位置のインデックスを検索する
リストは、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 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