Estúpida pregunta por delante: quiero una forma idiomática de encontrar el primer elemento en una lista que coincida con un predicado.encuentra el primer elemento en una secuencia que coincide con un predicado
El código actual es bastante feo:
[x for x in seq if predicate(x)][0]
He pensado en cambiar a:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Pero tiene que haber algo más elegante ... y sería bueno si devuelve un valor de None
en lugar de generar una excepción si no se encuentra ninguna coincidencia.
sé que sólo pudiera 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 para comenzar a llenar el código con funciones de utilidad como esta (y la gente probablemente no se dan cuenta de que son ya allí, por lo tienden a repetirse a lo largo del tiempo) si hay ins integrados que ya proporcionan lo mismo.
Esta no es una pregunta estúpida, y @ j-f-sebastian: esto no es un duplicado. Esta pregunta es específicamente sobre devolver un objeto y devolver 'None' en lugar de arrojar una excepción. También se trata de elegancia. La otra pregunta es más una pregunta n00b y no pregunta estas cosas, al menos no muy claramente. –
Además de ser preguntado más tarde que "[función de búsqueda de secuencia de python] (https://stackoverflow.com/questions/6039425/python-sequence-find-function)", esta pregunta tiene ** un título mucho mejor **. – Wolf