π‘ Problem Formulation: You’re tasked with generating a sequence of dates in Python, representing all days between two given dates inclusively. For example, given a start date of 2023-01-01 and an end date of 2023-01-05, your script should be able to produce a list of dates that include January 1, 2, 3, 4, and 5 of the year 2023.
Method 1: Using datetime and a Loop
This method entails utilizing the datetime module, which is a part of Python’s standard library. The approach increments the start date by one day in a loop until it reaches the end date. We’ll be using datetime.timedelta objects to represent the difference between two datetime.date objects.
Here’s an example:
from datetime import datetime, timedelta
start_date = datetime.strptime('2023-01-01', '%Y-%m-%d').date()
end_date = datetime.strptime('2023-01-05', '%Y-%m-%d').date()
current_date = start_date
dates_list = []
while current_date <= end_date:
    dates_list.append(current_date)
    current_date += timedelta(days=1)
print(dates_list)
In this example, we parse the start and end dates into date objects and store the sequence in dates_list. We then loop from the start date to the end date, inclusive, by incrementally adding one day (timedelta(days=1)) until the loop condition is not satisfied.
You can output the dates like so:
for date in dates_list:
    print(str(date))The output in my example would be:
2023-01-01
2023-01-02
2023-01-03
2023-01-04
2023-01-05Method 2: Using pandas.date_range
Pandas is a powerful data manipulation library that simplifies working with dates and times. The pandas.date_range function can generate date ranges automatically, providing a very concise way to solve our problem.
Here’s an example:
import pandas as pd start_date = '2023-01-01' end_date = '2023-01-05' dates_list = pd.date_range(start=start_date, end=end_date).tolist() print(dates_list)

In the code snippet, pandas.date_range is used to create a DateTimeIndex that spans from the start date to the end date. The .tolist() method converts this to a list of Timestamp objects, which we print out. This method is very concise and powerful, especially for those already using Pandas for data analysis.
Method 3: Using List Comprehension with datetime
List comprehension in Python offers a concise syntax for creating lists. Employing list comprehension alongside the datetime module can give us a one-liner solution to generate our list of dates.
Here’s an example:
from datetime import datetime, timedelta
start_date = datetime.strptime('2023-01-01', '%Y-%m-%d').date()
end_date = datetime.strptime('2023-01-05', '%Y-%m-%d').date()
dates_list = [(start_date + timedelta(days=x)) for x in range((end_date - start_date).days + 1)]
print(dates_list)What the above code does is calculate the difference between end_date and start_date to find the number of days in the range, then iterates over this range, adding each day to the start date. The result is a list of datetime.date objects, representing each day in the specified date range.
Method 4: Using iter with a Custom Generator Function
Creating a custom generator function allows you to use iter to produce an iterator that yields dates from the start date to the end date. This method offers a clear and pythonic approach to the problem.
Here’s an example:
from datetime import datetime, timedelta
def daterange(start_date, end_date):
    for n in range(int((end_date - start_date).days) + 1):
        yield start_date + timedelta(n)
start_date = datetime.strptime('2023-01-01', '%Y-%m-%d').date()
end_date = datetime.strptime('2023-01-05', '%Y-%m-%d').date()
dates_list = list(iter(daterange(start_date, end_date)))
print(dates_list)In this snippet, daterange is a generator function that receives a start and an end date. I then iteratively yields each day. Using the list() function, we convert the iterable into a list.
Bonus One-Liner Method 5: Using numpy.arange()
Numpy offers efficient and fast array operations. Its arange() function, when combined with numpy.datetime64, lets you handle dates and can thus be used to create a list of days between two dates.
Here’s an example:
import numpy as np start_date = '2023-01-01' end_date = '2023-01-05' dates_list = list(np.arange(np.datetime64(start_date), np.datetime64(end_date) + np.timedelta64(1, 'D'), dtype='datetime64[D]')) print(dates_list)
This one-liner utilises Numpy’s arange function to produce a range of dates from start_date to end_date, both expressed as numpy.datetime64 objects. The resulting array is converted to a list and outputted.
Here’s a visual representation of how the function works on a high level:

Summary/Discussion
- Method 1: Simple and doesn’t require any external libraries, but is not the most efficient for large ranges.
- Method 2: Very concise if pandas is already a project dependency, not ideal if you want to avoid an extra dependency.
- Method 3: Suitable for those who prefer one-liners while still using Python’s standard library, offers list comprehension readability.
- Method 4: Highly readable, good for large date ranges due to the use of a generator function, but slightly more complex.
- Bonus Method 5: Extremely fast operation for large date ranges and a succinct one-liner, however, comes with the overhead of requiring numpy, which may not be necessary if you’re not performing numerical operations.
Check out my new Python book Python One-Liners (Amazon Link).
If you like one-liners, you’ll LOVE the book. It’ll teach you everything there is to know about a single line of Python code. But it’s also an introduction to computer science, data science, machine learning, and algorithms. The universe in a single line of Python!
The book was released in 2020 with the world-class programming book publisher NoStarch Press (San Francisco).
Publisher Link: https://nostarch.com/pythononeliners
 
 
