Quiero una forma idiomática de encontrar el primer elemento en una lista que coincida con un predicado.
El código actual es bastante feo:
[x for x in seq if predicate(x)][0]
He pensado en cambiarlo a:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Pero debe haber algo más elegante ... Y sería bueno si devuelve un None
valor en lugar de generar una excepción si no se encuentra una coincidencia.
Sé que podría definir una función como:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Pero es bastante insípido comenzar a llenar el código con funciones de utilidad como esta (y las personas probablemente no notarán que ya están allí, por lo que tienden a repetirse con el tiempo) si hay elementos integrados que ya proporcionan lo mismo.