1. ホーム
  2. python

[解決済み] Python: 渡された関数を真にするリストの最初の要素のインデックスを返す

2023-05-12 04:38:35

質問

質問 list.index(x) 関数は、その値が x .

機能はありますか。 list_func_index() と同じような index() という関数を持っています。 f() をパラメータとする関数です。この関数は f() は全ての要素に対して実行される。 e まで、リストの f(e) が返す True . 次に list_func_index() のインデックスを返します。 e .

コードワイズ

>>> def list_func_index(lst, func):
      for i in range(len(lst)):
        if func(lst[i]):
          return i
      raise ValueError('no element making func True')

>>> l = [8,10,4,5,7]
>>> def is_odd(x): return x % 2 != 0
>>> list_func_index(l,is_odd)
3

もっとエレガントな解決策はないのでしょうか?(そしてこの関数のより良い名前も)

どのように解決するのですか?

ジェネレータを使ってワンライナーでできますよ。

next(i for i,v in enumerate(l) if is_odd(v))

ジェネレータの良いところは、要求された量までしか計算しないことです。そのため、最初の2つのインデックスを要求するのは(ほとんど)簡単です。

y = (i for i,v in enumerate(l) if is_odd(v))
x1 = next(y)
x2 = next(y)

しかし、最後のインデックスの後にStopIteration例外が発生することが予想されます(これがジェネレータの動作方法です)。これはまた、そのような値が見つからなかったことを知るために、あなたの "take-first" アプローチで便利です。