Lesson 10
I am Your Father
Chapter 4: More functions
any/all
Let’s take a break from object-oriented programming, and go back to cover some topics related to functions.
Now, let say you have a list of numbers and want to check whether any of them is an even number. You might end up using a for-loop for this.
import random
# generate a random list of 10 numbers
numbers = [random.randint(0, 50) for i in range(10)]
any_even = False
for number in numbers:
if number % 2 == 0:
any_even = True
break
print(any_even)
There is an arguably more readable way to accomplish this, using Python’s built-in any()
function.
import random
numbers = [random.randint(0, 50) for i in range(10)]
any_even = any(number%2==0 for number in numbers)
print(any_even)
In this version, you simply pass an iterable (e.g. a list) to the any()
function. The function will check whether ANY element in the list is True
, and return True
if so.
In this example, number%2==0 for number in numbers
generates something like [False, False, True, False, True, ...]
. So any()
will return True
is at least one element is True
.
What if you need to check whether ALL numbers in the list are True
? Easy - use the all()
function instead!
import random
numbers = [random.randint(0, 50) for i in range(10)]
all_even = all(number%2==0 for number in numbers)
print(all_even)
If you think carefully, any()
is equivalent to a series of or
operators, and all()
equivalent to a series of and
operators. These functions make your code more readable than like the one below.
import random
numbers = [random.randint(0, 50) for i in range(4)]
if number[0]%2 == 0 and numbers[1]%2 == 0 and numbers[2]%2 == 0 and numbers[3]%2 == 0:
all_even = True
else:
all_even = False
We won’t do any exercises for this (phew!), but any()
and all()
are functions worth knowing! Who knows when you might need them?