a = next(i for i in userInput if i in wordsTask)
Per rompere il basso un po ':
[i for i in userInput if i in wordsTask]
produrrà un elenco. Quello che vuoi è il primo elemento nell'elenco. Un modo per farlo è con la funzione successiva:
next([i for i in userInput if i in wordsTask])
Avanti restituisce l'elemento successivo da un iteratore. Nel caso di iterabile come una lista, finisce per prendere il primo oggetto.
Ma non v'è alcun motivo per costruire realmente l'elenco, in modo che possiamo utilizzare un generatore di espressione invece:
a = next(i for i in userInput if i in wordsTask)
Si noti inoltre che se l'espressione generatore è vuoto, questo si tradurrà in un'eccezione: StopIteration
. Potresti voler gestire quella situazione. Oppure puoi aggiungere un valore predefinito
a = next((i for i in userInput if i in wordsTask), 42)
fonte
2012-01-26 04:50:18
Molto bello! E molto sottile - dati gli OP che chiedono aiuto nella comprensione delle liste di apprendimento, probabilmente dovresti spiegare cosa sta succedendo qui. – sblom
nota che se 'len (userInput) == 0' potrebbe essere' True', allora si dovrebbe fornire un valore predefinito tramite il secondo argomento di 'next':' a = next ((espressione del generatore), default) ' –
renderlo un poco più verboso per favore – RanRag