特定の基準に一致する最初のリスト項目を検索/返す最もエレガントで効率的な方法は何でしょうか?
たとえば、オブジェクトのリストがあり、属性を持つ最初のオブジェクトを取得したいとしますobj.val==5
。もちろんリストの内包表記を使用することもできますが、O(n) が発生し、n が大きい場合は無駄になります。条件が満たされたらループを使用することもできますbreak
が、より Python 的でエレガントなソリューションがあると思いました。
ベストアンサー1
オブジェクトに他のインデックスやソートされた情報がない場合は、そのようなオブジェクトが見つかるまで反復処理する必要があります。
next(obj for obj in objs if obj.val == 5)
ただし、これは完全なリストの理解よりも高速です。次の 2 つを比較してください。
[i for i in xrange(100000) if i == 1000][0]
next(i for i in xrange(100000) if i == 1000)
最初のものは 5.75 ミリ秒、2 番目のものは 58.3 マイクロ秒 (ループが 100 倍短いため 100 倍高速) が必要です。