Vous pouvez le faire:
>>> l = [True, False, True]
>>> False in map(bool, l)
True
Rappelons qu' map
en Python 3 est un générateur. Pour Python 2, vous voudrez probablement utiliser imap
Mea Culpa: Après le chronométrage de ces, la méthode que j'ai proposé est de loin le plus lent
La plus rapide est not all(l)
ou not next(filterfalse(bool, it), True)
qui est juste un idiot itertools variante. Utiliser la Prise Aidleys solution.
Code de Timing:
from itertools import filterfalse
def af1(it):
return not all(it)
def af2(it):
return any(not i for i in it)
def af3(iterable):
for element in iterable:
if not element:
return True
return False
def af4(it):
return False in map(bool, it)
def af5(it):
return not next(filterfalse(bool, it), True)
if __name__=='__main__':
import timeit
for i, l in enumerate([[True]*1000+[False]+[True]*999, # False in the middle
[False]*2000, # all False
[True]*2000], # all True
start=1):
print("case:", i)
for f in (af1, af2, af3, af4, af5):
print(" ",f.__name__, timeit.timeit("f(l)", setup="from __main__ import f, l", number=100000), f(l) )
Résultats:
case: 1
af1 0.45357259700540453 True
af2 4.538436588976765 True
af3 1.2491040650056675 True
af4 8.935278153978288 True
af5 0.4685744970047381 True
case: 2
af1 0.016299808979965746 True
af2 0.04787631600629538 True
af3 0.015038023004308343 True
af4 0.03326922300038859 True
af5 0.029870904982089996 True
case: 3
af1 0.8545824179891497 False
af2 8.786235476000002 False
af3 2.448748088994762 False
af4 17.90895140200155 False
af5 0.9152941330103204 False
6 votes
Votre question a déjà été correctement répondue par Jack Aidley. Vous pouvez vérifier fr.wikipedia.org/wiki/De_Morgan's_laws pour la théorie qui se cache derrière.
2 votes
La réponse de JackAidley et celle de Deceze peuvent toutes deux être utiles en fonction de votre problème. Notez que "any element is falsy" n'est pas la même chose que "no element is truthy" - ils ont des réponses différentes pour le tableau vide.