2015-06-28 16 views

risposta

52

Utilizzando any:

>>> data = [False, False, False] 
>>> not any(data) 
True 

any restituisce true se non c'è alcun valore di verità nella iterabile.

+1

Dovrebbe essere tutto? – Ajay

+2

@Ajay, Per usare 'all':' tutto (non x per x nei dati) ' – falsetru

+0

sì, tutto dovrebbe essere FALSO. – jean

9

Fondamentalmente ci sono due funzioni che trattano un iterabile e restituiscono Vero o Falso a seconda di quali valori di valori booleani della sequenza valgono.

  1. all(iterable) restituisce True se tutti gli elementi del iterable sono considerati come veri valori (come reduce(operator.and_, iterable)).

  2. any(iterable) restituisce Vero se almeno un elemento di iterable è un valore vero (di nuovo, utilizzando elementi funzionali, reduce(operator.or_, iterable)).

Utilizzando la funzione all, è possibile mappare operator.not_ sopra la vostra lista o semplicemente costruire una nuova sequenza con i valori negati e verificare che tutti gli elementi della nuova sequenza sono vere:

>>> all(not element for element in data) 

Con il any funzione, è possibile verificare che almeno un elemento è vero e quindi nega il risultato in quanto è necessario per tornare False se c'è un vero e proprio elemento:

>>> not any(data) 

Secondo la legge di De Morgan, queste due varianti restituiranno lo stesso risultato, ma preferirei l'ultima (che usa any) perché è più breve, più leggibile (e può essere intuitivamente intesa come "non c'è un vero valore nei dati ") e più efficiente (dal momento che non si creano sequenze aggiuntive).

+5

La soluzione 'any()' si interromperà non appena trova un valore True e quindi di solito sarà più veloce. –

-2

Andiamo, ragazzi, ha chiesto di restituire Vero se c'era qualche Vero. Dicendo lo stesso, False quando tutti sono falsi.

any(data) 
Problemi correlati