The Python any function tests each element of an iterable against a condition. It is invaluable as a filtering function and be combined with other language features. Used with features like lambdas or list comprehensions, Python’s any() function makes incredibly powerful statements with syntactic ease.
Python’s any()
function performs a test of truthiness for each member of a collection. This means every element is considered against a conditional such that a value of either True or False is returned. The any()
function is best used in cases where a membership test is needed but characteristics of each member need to be considered.
Introduction
Python’s any()
function can be used simply to check if a value meets a simple condition or in more complex cases where additional functions, objects, and operands are used to assess a condition. In this article we’ll take a look at how the any()
function is used, starting with simple examples and moving through some more complex cases.
TL;DR – To check all items of an iterable using the any()
function one can use the following syntax:
# Define an empty list nums = [] # Check if empty any(nums) >>> False # Add some values to nums nums.extend([1, 3, 8, 3, 9, 5, 3, 0, 7, 6]) # Check if any non integer values present any(type(x) != int for x in nums) >>> False # Check if any value above 10 any(x > 10 for x in nums) >>> False # Check if any even numbers print(any(x % 2 == 0 for x in nums)) >>> True
As described by the official documentation, Python’s any() function will “return True if any element of an iterable is True. If the iterable is empty, return False.” Equivalently, the documentation offers the following example:
def any(iterable): for element in iterable: if element: return True return False
This showcases the logic implemented by the any()
function but fails to convey all the creative opportunities it provides developers. We’ll cover some basic uses of any()
as well as some more advanced approaches to better understand just how useful this function really is.
Basic Example
Python’s robust language features are one of the reasons it continues to be one of the most popular programming languages. The Python built-in functions are an excellent example of such features—simplifying many commonly used operations for developers.
Python’s any()
built-in function is one such feature and can greatly simplify the syntax needed for elementwise checking of iterable objects like lists
, dicts
, and tuples
.
Before we dive too deeply let’s check out a simple example of the benefits offered by the any()
function. Here, we’ll simply check whether a list of random numbers contains an even number.
# Create a list of random numbers numbers = [3, 6, 4, 7, 4, 9, 6, 6, 3, 7] # Define a function to check if 9 is in the list def has_nine(): for number in numbers: if number == 9: return True return False # Check the list has_nine() >>> True
Here we see a traditional approach to checking an iterable for a condition—looping over the list. This function is horribly contrived and only suited for this use case. The issue in creating such a function is that one needs to have a condition specific to each case. Here, our condition is if number == 9
. Python’s any()
function allows a much more flexible approach:
# Check if any value is equal to 9 any(x == 9 for x in numbers) >>> True
Here we see our comparison reduced to a single line of code. This example showcases the functionality of any()
well enough but isn’t very practical. For example, 9 in numbers
would be a comparable assertion and doesn’t require any use of functions—built-in or otherwise. To get a better example of using the any()
function let’s mix in some complexity.
More Examples
The any()
function really starts to show its value when we introduce some complexity in our use of conditionals. Before we were simply assessing whether a member of the numbers
collection was equal to the value 9
. Now, let’s consider how we can have a bit more fun:
# Check if any two unique numbers add to be greater than 10 any(x + y > 10 for x in numbers for y in numbers if x is not y) >>> True # Check if any number is greater than 2 standard deviations # from the mean of the numbers from statistics import mean, stdev # Use any to check each number any(x > mean(numbers) + stdev(numbers) * 2 for x in numbers) >>> False
Breaking Things
It’s important to keep in mind that the any() function accepts an iterable as an argument. Passing a single value into any()
will cause Python to throw a TypeError
exception. Consider the following examples:
# Pass a single element any(1) >>> TypeError: 'int' object is not iterable # Pass a single element in a list any([1]) >>> True # Pass multiple elements as non-iterable any(1, 2) >>> TypeError: any() takes exactly one argument (2 given) # Pass multiple empty collections any([], []) >>> TypeError: any() takes exactly one argument (2 given) # Pass empty collection any([]) >>> False # no error # Pass a single string any("alpha") >>> True # Pass a single character string any("0") >>> True # Convert a string to a int via eval any(eval("0")) >>> TypeError: 'int' object is not iterable
These examples showcase the nuances by which the any()
function will nag about having multiple arguments or non-iterables. In summary, we now see the following is true for use of the any()
function:
- Only a single argument can be given;
- Only an iterable object can be passed as the argument;
- Strings—even as a single character—are iterables and can be passed to any;
- Casting a string to a non-iterable will be interpreted as an invalid argument
Note: The any()
and all()
functions are quite similar. However, any()
will return on the first element meeting the Truthy condition where all()
will return on the first element failing to meet the Truthy condition. In a sense, they are complements of one another. Read more about Python’s all() built in here.
Final Thoughts
The any()
function is among the most useful of the Python built-in functions. Its use case is broad and provides developers with a constant opportunity to reduce syntactic mass. Whether your goal is to be as Pythonic as possible, to develop in as few lines of code as possible, or just chain together the longest one-liner possible—Python’s any()
function can lend a hand.
One other benefit of the any()
function is that it will return True on the first truthy element—be that implied by the presence or evaluated by conditional via a more complex argument. I like to think of the any()
function as a membership test that considers the characteristics of each member. If simply knowing an item is in a collection isn’t enough—that’s when any()
is most useful!