Voglio un modo idiomatico per trovare il primo elemento in un elenco che corrisponda a un predicato.
Il codice attuale è abbastanza brutto:
[x for x in seq if predicate(x)][0]
Ho pensato di cambiarlo in:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Ma ci deve essere qualcosa di più elegante ... E sarebbe bello se restituisse un None
valore piuttosto che sollevare un'eccezione se non viene trovata alcuna corrispondenza.
So che potrei semplicemente definire una funzione come:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Ma è abbastanza insipido iniziare a riempire il codice con funzioni di utilità come questa (e probabilmente le persone non noteranno che sono già lì, quindi tendono a ripetersi nel tempo) se ci sono insiemi che forniscono già lo stesso.