"and" and "or" on every item in a list

Matimus mccredie at gmail.com
Mon Oct 29 19:15:15 EDT 2007


On Oct 29, 3:57 pm, GHZ <geraint.willi... at gmail.com> wrote:
> 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
>
> Thanks

If you are using python 2.5 the best way would be something like this:
>>> all(x > 1 for x in [1,2,3])
False
>>> any(x > 1 for x in [1,2,3])
True

If you are using an earlier version you are still discouraged from
using reduce in place of a more readable construct. In most cases list
comprehension is encouraged over map also.

If `all' and `any' aren't defined you can use something like the
following. One advantage of these over what you posted is that they
will return as soon as an exit condition is reached as opposed to
processing the entire list.
[code]
if not all:
 def all(seq):
  for val in seq:
   if not val:
    return False
  return True

if not any:
 def any(seq):
  for val in seq:
   if val:
    return True
  return False
[/code]

Matt




More information about the Python-list mailing list