La fonction intégrée any
fait ce que vous voulez:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
any
a l'avantage sur reduce
de court-circuiter le test pour les éléments plus tard dans la séquence une fois qu'il trouve une vraie valeur. Cela peut être très utile si la séquence est un générateur avec une opération coûteuse derrière elle. Par exemple:
>>> def iam(result):
... # Pretend this is expensive.
... print "iam(%r)" % result
... return result
...
>>> any((iam(x) for x in [False, True, False]))
iam(False)
iam(True)
True
>>> reduce(lambda x,y: x or y, (iam(x) for x in [False, True, False]))
iam(False)
iam(True)
iam(False)
True
Si votre version de Python n'a pas any()
, all()
builtins ils sont facilement mises en œuvre comme Guido van Rossum suggested:
def any(S):
for x in S:
if x:
return True
return False
def all(S):
for x in S:
if not x:
return False
return True