PythonでKより大きい最初の要素のインデックスを取得する方法
Pythonのリスト内の要素は、必ずしもソートされた順序で並んでいるとは限りません。また、特定の値よりも大きい値だけに関心があるケースも少なくありません。この記事では、リスト内でKより大きい値を持つ最初の要素のインデックスを取得する方法を、複数のアプローチから解説します。
方法1:enumerate()とnext()を組み合わせる
enumerate()関数を使うと、リスト内の各要素についてインデックスと値の両方を同時に取得できます。そこに「25より大きい」という条件を適用し、条件を満たす最初の要素だけを取り出します。next()関数がリストの各要素を順番に処理し、条件が成立した時点で結果を返します。
コード例
List = [21,10,24,40.5,11]
print("Given list: " + str(List))
# next() + enumerate() を使用
result = next(k for k, value in enumerate(List)
if value > 25)
print("Index is: ", result)実行結果
Given list: [21, 10, 24, 40.5, 11] Index is: 3
方法2:filter()とlambda関数を使用する
次の例では、lambda関数を使って指定した値と各要素を比較し、条件を満たす要素だけをfilter()で抽出します。抽出されたリストの中から、インデックス0にある最初の要素を選び、その元のリスト上でのインデックスをindex()メソッドで求めています。
コード例
List = [21,10,24,40.5,11]
print("Given list: " + str(List))
# filter() + lambda を使用
result = list(filter(lambda k: k > 25, List))[0]
print("Index is: ", List.index(result))実行結果
Given list: [21, 10, 24, 40.5, 11] Index is: 3
方法3:map()とlambdaを使用する
この例では、filter()の代わりにmap()を使った類似のアプローチを紹介します。map()関数で各要素に対して比較処理を行い、True/Falseのリストを生成します。その後、index(True)によって、条件が初めて真になった位置(インデックス)を取得します。
コード例
List = [21,10,24,40.5,11]
print("Given list: " + str(List))
# map() + lambda を使用
result = list(map(lambda k: k > 25, List)).index(True)
print("Index is: ", (result))実行結果
Given list: [21, 10, 24, 40.5, 11] Index is: 3
まとめ
いずれの方法でも、リスト [21, 10, 24, 40.5, 11] の中で25より大きい最初の要素「40.5」のインデックスである3が正しく取得できました。
- enumerate() + next():条件を満たした時点で処理を終了できるため、大きなリストでは効率的です。
- filter() + lambda:条件を満たすすべての要素を抽出してから最初のものを選ぶため、直感的で読みやすいコードになります。
- map() + lambda:真偽値のリストからインデックスを直接求めるシンプルな手法です。
用途やリストのサイズに応じて、最適な方法を選択してください。
-
Pythonでリストの最後の要素を取得する方法【初心者向け】
Pythonでリストの最後の要素を取得する基本方法 Pythonでは、リストをはじめとするシーケンス型オブジェクトに対して、インデックス(添字)を使って任意の要素にアクセスできます。インデックスは0から始まるため、最初の要素は「0」、2番目の要素は「1」というように指定します。 ここで重要になるのが負のインデックスです。負の数を指定すると、リストの末尾から逆順に数えて要素を取得できます。したがって、リストの最後の要素を取得したい場合は、インデックスとして -1 を指定するだけでOKです。 >>> L1 = [1, 2, 3, 4, 5] >>> print(
-
Pythonでリスト内の要素のインデックスを取得する方法
index()メソッドで最初の出現位置を取得する リスト(文字列やタプルなど、他のシーケンス型でも同様)に用意されている index() メソッドを使うと、特定の要素が最初に出現する位置(インデックス)を簡単に見つけることができます。 >>> L1=[a, b, c, a, x] >>> L1 [a, b, c, a, x] >>> L1.index(a) 0 この例では、リスト L1 の中で a が最初に出現するのはインデックス 0 の位置であるため、0 が返されます。なお、指定した要素がリスト内に存在しない場合は ValueError