Is this the best way to test every item in a list?
def alltrue(f,l):
return reduce(bool.__and__,map(f,l))
def onetrue(f,l):
return reduce(bool.__or__,map(f,l))
alltrue(lambda x:x>1,[1,2,3]) False
alltrue(lambda x:x>=1,[1,2,3])
True
As of Python2.5, there's an any() and all() function built into
the language.
>>> any(map(lambda x: x>1, [1,2,3]))
>>> all(map(lambda x: x>1, [1,2,3]))
Implementations for older versions are given at
http://docs.python.org/lib/built-in-funcs.html
You can adjust the "if" test in the example code so that it calls
your function...something like
def my_any(f, iterable):
for element in iterable:
if f(element):
return True
return False
def my_all(f, iterable):
for element in iterable:
if not f(element):
return False
return True
The advantage of the code in the docs is that it
short-circuits...there's no need to reduce the entire list if an
early item triggers the condition (a "true" early in an "any" or
a "false" early in an "all").
While you can use a reduce(bool.__and__, thing) call, I more
frequently see it as reduce(operator.or_, thing)
Just a few ideas,
-tkc