Domanda stupida in anticipo: voglio un modo idiomatico per trovare il primo elemento in un elenco che corrisponde a un predicato.trova il primo elemento in una sequenza che corrisponde a un predicato
Il codice attuale è abbastanza brutto:
[x for x in seq if predicate(x)][0]
ho pensato di cambiare a:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
ma ci deve essere qualcosa di più elegante ... e sarebbe bello se restituisce un valore None
anziché generare un'eccezione se non viene trovata alcuna corrispondenza.
So che potrei solo definire una funzione come:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
ma è del tutto insapore per iniziare a riempire il codice con funzioni di utilità come questo (e la gente probabilmente non si accorgono che sono già lì, in modo da tendono a essere ripetuti nel tempo) se ci sono insiemi integrati che forniscono già lo stesso.
Questa non è una domanda stupida, e @ j-f-sebastian: questo non è un duplicato. Questa domanda riguarda in particolare la restituzione di un oggetto e il ritorno di "Nessuno" anziché il lancio di un'eccezione. Riguarda anche l'eleganza. L'altra domanda è più di una domanda n00b e non chiede queste cose, almeno non molto chiaramente. –
Oltre a essere chiesto più tardi di "[funzione di ricerca sequenza python] (https://stackoverflow.com/questions/6039425/python-sequence-find-function)", questa domanda ha un ** titolo molto migliore **. – Wolf