Skip to content

Latest commit

 

History

History
44 lines (33 loc) · 1.28 KB

File metadata and controls

44 lines (33 loc) · 1.28 KB

Create A Range Of Descending Values

A typical use of range looks something like this:

>>> list(range(1, 5))
[1, 2, 3, 4]

Which is equivalent to this one where we give a step value of 1.

>>> list(range(1, 5, 1))
[1, 2, 3, 4]

If we try to create a negative range, that is, a range of values in decreasing order, we get an empty list.

>>> list(range(0, -7))
[]

That's because the step value still defaults to 1. And there are no positive steps between 0 and -7. So, let's give range a step value of -1.

>>> list(range(0,-7, -1))
[0, -1, -2, -3, -4, -5, -6]

One practical use case of a negative range like this is using a list comprehension to transform it into a list of the last seven days.

>>> from datetime import datetime, timedelta
>>> [datetime.now().date() + timedelta(days=days) for days in range(0,-7, -1)]
[datetime.date(2026, 3, 19), datetime.date(2026, 3, 18), datetime.date(2026, 3, 17), datetime.date(2026, 3, 16), datetime.date(2026, 3, 15), datetime.date(2026, 3, 14), datetime.date(2026, 3, 13)]

Of course this could have been written with a positive range and then subtracting the timedelta. I like that I have the option of doing this in whatever way makes the code most readable.