述語と一致するリストの最初の要素を見つける慣用的な方法が欲しい。
現在のコードはかなり醜いです:
[x for x in seq if predicate(x)][0]
私はそれを次のように変更することを考えました:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
しかし、もっとエレガントなものが必要です...そしてNone
、一致が見つからない場合に例外を発生させるのではなく、値を返すのが良いでしょう。
私は次のような関数を定義できることを知っています:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
しかし、すでに同じ機能を提供しているビルトインがある場合、このようなユーティリティ関数をコードに入力し始めることはまったく無意味です(そして、おそらくそれらがすでにそこにあることに気付かないため、時間の経過とともに繰り返される傾向があります)。