Two similar ways to check whether a list contains an odd number:
any(x % 2 for x in a) any(True for x in a if x % 2)
Timing results with a = [0] * 10000000
(five attempts each, times in seconds):
0.60 0.60 0.60 0.61 0.63 any(x % 2 for x in a) 0.36 0.36 0.36 0.37 0.37 any(True for x in a if x % 2)
Why is the second way almost twice as fast?
My testing code:
from timeit import repeat setup = 'a = [0] * 10000000' expressions = [ 'any(x % 2 for x in a)', 'any(True for x in a if x % 2)', ] for expression in expressions: times = sorted(repeat(expression, setup, number=1)) print(*('%.2f ' % t for t in times), expression)
Try it online!
The first method sends everything to any()
whilst the second only sends to any()
when there's an odd number, so any()
has fewer elements to go through.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With