2013-05-30 11 views
6

Ho un elenco di elementi in python e un modo per verificare se l'elemento è valido o meno. Devo rifiutare l'intero elenco se uno qualsiasi degli elementi non è valido. Potrei fare questo:Modo rapido per rifiutare una lista in Python

def valid(myList): 
    for x in myList: 
     if isInvalid(x): 
      return False 
    return True 

C'è un modo più pitonico per fare questo? Potresti filtrarlo, ma ciò valuterà tutti gli elementi nell'elenco, quando valutare solo il primo potrebbe essere sufficiente (se è cattivo) ...

Grazie mille per il tuo aiuto.

risposta

14

Il modo tipico per farlo è quello di utilizzare la funzione built-any con un'espressione generatore

if any(isInvalid(x) for x in myList): 
    #reject 

La sintassi è pulito ed elegante e si ottiene lo stesso comportamento di corto circuito che hai avuto sulla vostra funzione originale .

+0

Bello !, non sapevo di una cosa del genere! – gt6989b

+0

Dovrebbe essere 'not any'. –

+0

@AshwiniChaudhary - Preferisco modificare la logica del programma. Se uno non è valido, rifiuta l'elenco (anziché quello che l'OP ha al momento - se nessuno è valido, mantieni l'elenco). Ma in ultima analisi, l'OP deve decidere :) – mgilson

Problemi correlati