How To Check If a List Is Empty in Python

Learn multiple techniques to check for an empty list

Jonathan Hsu
Nov 17 · 3 min read
Photo by Andrew Neel on Unsplash

There are many options to check if a list is empty. Before getting into the syntax of the solutions, let’s lay out the different factors involved in deciding which method we want to use.

The expression we craft can fall into one of two camps, an explicit comparison to an empty list or an implicit evaluation of an empty list. What does that mean?


Explicit Comparison

Let’s begin with the explicit comparison. Whether we use list notation or an empty function , the strategy is to see if our list in question is exactly the same as an empty list.

# both create an empty list
a = []
b = list()
print(a == b) # True

Additionally, we can use the function to return the actual count of items in the list.

a = []if len(a) == 0:
print("The list is empty")

Implicit Evaluation

Conversely, an implicit evaluation leverages the way in which an empty list will evaluate as a boolean value and a populated list will evaluate as a boolean value.

a = []
b = [1]
if a:
print("Evaluated True")
else:
print("Evaluated False")
if b:
print("Evaluated True")
else:
print("Evaluated False")
"""
Evaluated False
Evaluated True
"""

So, what difference does it make?

I have developed the habit of using explicit comparisons; however, if you are trying to follow the practice of duck typing, then you want to go with the implicit method.


What Is Duck Typing?

The term duck typing comes from the phrase:

If it walks like a duck and it quacks like a duck, then it must be a duck.

Functionally, it’s an acknowledgment that less stress will be put on the object’s actual data type. Rather, emphasis will be placed on its attribute’s behaviors, such as being iterable. Ultimately, the goal is to become type agnostic.

Duck typing prioritizes convenience over safety, allowing for more flexible code that can adapt to a wider range of uses and is less strict than traditional conventions.


Which Technique Should I Use?

I’ve become increasingly comfortable with, and as a result preferential towards, an implicit evaluation, understanding that an empty list will evaluate to .

a = []print(bool(a)) # False

This allows me to consolidate longer expression checks, such as:

# BEFORE
if isinstance(a,list) and len(a) > 0:
print("Processing list...")
# AFTER
if a:
print("Processing list...")

Ultimately, the choice will come down to implications of an empty list.

Are you checking if a list is empty because you want to iterate over it? Implicit evaluation is the path of least resistance.

Are you checking for an empty list because your code is planning on using list methods next? I would probably choose an explicit comparison to also validate data type in that scenario.

Which method do you prefer? What are the determining factors when deciding on the technique you will use to check for an empty list?

Better Programming

Advice for programmers.

Jonathan Hsu

Written by

I’m a black belt problem-solver (literally). I enjoy the taking on new challenges, building skills, and sharing what I’ve learned. 🥋

Better Programming

Advice for programmers.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade