and [True,True] --> [True, True]?????
John Posner
jjposner at snet.net
Sun Apr 26 22:31:27 CEST 2009
jazbees wrote:
> I'm surprised to see that the use of min and max for element-wise
> comparison with lists has not been mentioned. When fed lists of True/
> False values, max will return True if there is at least one True in
> the list, while min will return False if there is at least one False.
> Going back to the OP's initial example, one could wrap a min check on
> each list inside another min.
I agree with Duncan Booth that any() is equivalent to -- and better than
-- max() for handling boolean values. But what boolean-oriented function
is equivalent to min()? How about this, which returns the negation of
the min() result:
def at_least_one_false(value_list):
"""
return True if at least one value in value_list is logically FALSE
"""
return any( [not val for val in value_list] )
This works, but the short-circuit feature of any() is undermined by the
process-the-whole-sequence behavior of the list comprehension. So, let's
delete the square brackets, converting the list comprehension into a
generator expression:
return any( not val for val in value_list )
According to timeit.Timer.timeit(), this change improves performance
from 14.59 seconds to 10.49 seconds, with a long value_list:
[True]*20 + [False] + [True]*30
But the generator expression produces worse performance with a shorter
value_list:
[True]*2 + [False] + [True]*3
More information about the Python-list
mailing list