Chcę idiomatycznego sposobu na znalezienie pierwszego elementu na liście, który pasuje do predykatu.
Obecny kod jest dość brzydki:
[x for x in seq if predicate(x)][0]
Myślałem o zmianie tego na:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Ale musi być coś bardziej eleganckiego ... I byłoby miło, gdyby zwracało None
wartość, zamiast zgłaszać wyjątek, jeśli nie zostanie znalezione dopasowanie.
Wiem, że mógłbym po prostu zdefiniować funkcję taką jak:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Ale rozpoczęcie wypełniania kodu takimi funkcjami użytkowymi jest zupełnie bez smaku (a ludzie prawdopodobnie nie zauważą, że już tam są, więc mają tendencję do powtarzania się w czasie), jeśli istnieją wbudowane narzędzia, które już zapewniają to samo.