Je veux un moyen idiomatique de trouver le premier élément d'une liste qui correspond à un prédicat.
Le code actuel est assez laid :
[x for x in seq if predicate(x)][0]
J'ai pensé à le changer en :
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Mais il doit y avoir quelque chose de plus élégant... Et ce serait bien si cela retournait un None
plutôt que de lever une exception si aucune correspondance n'est trouvée.
Je sais que je pourrais simplement définir une fonction comme :
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Mais il est tout à fait insipide de commencer à remplir le code avec des fonctions utilitaires comme celle-ci (et les gens ne remarqueront probablement pas qu'elles sont déjà là, donc elles ont tendance à être répétées au fil du temps) s'il existe des modules intégrés qui fournissent déjà la même chose.