Find index in list Python

Pythonのリストの要素のインデックス(何番目か)を取得

Posted: 2018-07-02 / Modified: 2021-04-10 / Tags: Python, リスト
Tweet

Pythonのリスト(配列)の要素のインデックス、つまりその要素が何番目に格納されているかを取得する方法について、以下の内容を説明する。

  • リストの要素が重複していない場合: index[]
  • リストの要素が重複している場合: index[], enumerate[], リスト内包表記
  • タプルのインデックスを取得
  • 最大値・最小値のインデックス(位置)を取得
スポンサーリンク

リストの要素が重複していない場合: index[]

リストの要素が重複していない場合、index[]メソッドを使う。

index[]の引数に調べたい値を指定すると0始まりのインデックスが取得できる。

l = list['abcde'] print[l] # ['a', 'b', 'c', 'd', 'e'] print[l.index['a']] # 0 print[l.index['c']] # 2
source: list_index.py

リストに含まれていない値を指定するとエラーValueErrorになるので注意。

# print[l.index['x']] # ValueError: 'x' is not in list
source: list_index.py

リストに含まれていない値に対して任意のデフォルト値を返したい場合は、例えば以下のような関数を定義する。

def my_index[l, x, default=False]: if x in l: return l.index[x] else: return default print[my_index[l, 'd']] # 3 print[my_index[l, 'x']] # False print[my_index[l, 'x', -1]] # -1
source: list_index.py

三項演算子を使うとシンプルに書ける。

  • 関連記事: Pythonの三項演算子(条件演算子)でif文を一行で書く
def my_index2[l, x, default=False]: return l.index[x] if x in l else default print[my_index2[l, 'd']] # 3 print[my_index2[l, 'x']] # False print[my_index2[l, 'x', -1]] # -1
source: list_index.py

リストの要素が重複している場合: index[], enumerate[], リスト内包表記

リストの要素が重複している場合、index[]メソッドは最初のインデックスのみを返す。

l_dup = list['abcba'] print[l_dup] # ['a', 'b', 'c', 'b', 'a'] print[l_dup.index['a']] # 0 print[l_dup.index['b']] # 1
source: list_index.py

それで問題なければindex[]をそのまま使えばいいが、すべてのインデックスをリストで取得したい場合は、組み込み関数enumerate[]とリスト内包表記を利用する。

  • 関連記事: Python, enumerateの使い方: リストの要素とインデックスを取得
  • 関連記事: Pythonリスト内包表記の使い方
print[[i for i, x in enumerate[l_dup] if x == 'a']] # [0, 4] print[[i for i, x in enumerate[l_dup] if x == 'b']] # [1, 3]
source: list_index.py

要素が一つだけ含まれている場合もリストを返す。

print[[i for i, x in enumerate[l_dup] if x == 'c']] # [2]
source: list_index.py

リストに含まれていない値に対しては空のリストを返す。

print[[i for i, x in enumerate[l_dup] if x == 'x']] # []
source: list_index.py

繰り返し使うなら関数にしておくと便利。

def my_index_multi[l, x]: return [i for i, _x in enumerate[l] if _x == x] print[my_index_multi[l_dup, 'a']] # [0, 4] print[my_index_multi[l_dup, 'c']] # [2] print[my_index_multi[l_dup, 'x']] # []
source: list_index.py

リストから重複した要素を削除したり抽出したりしたい場合は以下の記事を参照。

  • 関連記事: Pythonでリスト(配列)から重複した要素を削除・抽出

タプルのインデックスを取得

これまではリストを例にしていたが、タプルも同様にindex[]メソッドを持っている。

t = tuple['abcde'] print[t] # ['a', 'b', 'c', 'd', 'e'] print[t.index['a']] # 0 # print[t.index['x']] # ValueError: tuple.index[x]: x not in tuple
source: list_index.py

上で定義した関数はタプルに対してもそのまま使える。

print[my_index[t, 'c']] # 2 print[my_index[t, 'x']] # False t_dup = tuple['abcba'] print[t_dup] # ['a', 'b', 'c', 'b', 'a'] print[my_index_multi[t_dup, 'a']] # [0, 4]
source: list_index.py

最大値・最小値のインデックス(位置)を取得

具体例として、リストの最大値・最小値のインデックス(位置)を取得する例を示す。

index[]の引数にmax[], min[]を指定すればよい。

  • 関連記事: Pythonでリストの最大値・最小値から順にn個の要素を取得
l = [30, 40, 20, 0, 10] print[l.index[max[l]]] # 1 print[l.index[min[l]]] # 3
source: list_index.py

これまでの例のように、該当の値の要素が重複している場合は最初のインデックスのみが返される。

l_dup = [0, 40, 20, 0, 40] print[l_dup.index[max[l_dup]]] # 1 print[l_dup.index[min[l_dup]]] # 0
source: list_index.py

すべてのインデックスをリストで取得したい場合は、組み込み関数enumerate[]とリスト内包表記を利用する。

def my_index_multi[l, x]: return [i for i, _x in enumerate[l] if _x == x]
source: list_index.py
print[my_index_multi[l_dup, max[l_dup]]] # [1, 4] print[my_index_multi[l_dup, min[l_dup]]] # [0, 3]
source: list_index.py

なお、NumPyでは配列numpy.ndarrayの最大値・最小値のインデックス(位置)を返す関数・メソッドargmax[], argmin[]が提供されている。

  • 関連記事: NumPy配列ndarrayの最大値・最小値のインデックス(位置)を取得
スポンサーリンク
シェア
Tweet

関連カテゴリー

  • Python
  • リスト

関連記事

  • Pythonのリストと配列とnumpy.ndarrayの違いと使い分け
  • Pythonでリストの最大値・最小値から順にn個の要素を取得
  • Python, splitでカンマ区切り文字列を分割、空白を削除しリスト化
  • Python, enumerateの使い方: リストの要素とインデックスを取得
  • Pythonのリスト(配列)を任意の値・要素数で初期化
  • Pythonでリストや文字列を逆順に並べ替え(reverse, reversed)
  • Pythonで一次元配列を二次元配列に変換(numpy.ndarray、リスト)
  • Pythonでリストのサイズ(要素数)を取得
  • pandas.DataFrame, SeriesとPython標準のリストを相互に変換
  • NumPy配列ndarrayとPython標準のリストを相互に変換
  • Pythonのfilter[]でリストから条件を満たす要素を抽出・削除
  • Pythonで変数やリストの値を入れ替え(交換・並べ替え)
  • Pythonでリスト(配列)の要素を削除するclear, pop, remove, del
  • Pythonでゼロ埋めなしの数字の文字列リストをソート
  • Pythonでリストをソートするsortとsortedの違い

Video liên quan

Chủ Đề