"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