"Roose" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
> I need this a lot: a one line way to do a n-ary and or 'or'.
>
> e.g.,
>
> result = True
> for x in L:
>   if not boolean_function(x):
>     result = False
>
> or
>
> >>> reduce(operator.__and__, [boolean_function(x) for x in L)
>
> So usually I just write a little function any( L, boolean_function =
> identity ) or all( ... ).  But I am kind of sick of doing that all the
> time -- does it exist anywhere in the Python libraries?  It seems really
> common to me.
>
> The first way isn't satisfactory because it takes so many lines for what is
> essentially one "primitive" operation.  The second way isn't great because
> it is not as readable and many readers don't like to see reduce, even if it
> is a common idiom like that.  Also I don't believe it short circuits.


You're right, it doesn't short circuit, as most of the examples posted above. 
Here's one that it
does:

from itertools import ifilter, dropwhile

def any(pred, iterable):
    try: ifilter(pred,iterable).next()
    except StopIteration: return False
    else: return True

def all(pred, iterable):
    try: dropwhile(pred,iterable).next()
    except StopIteration: return True
    else: return False


George


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to