We can make it handle all valid indices, bottom to top,
n = len(lst)
if -n <= index < n:
As solutions go, the most elegant one still has to pass muster. What edge cases can it endure? This may not be an example of said interrogation of the matter, but that is the form of scrutiny we must apply to all our code models.
When, and only when one’s code passes all scrutiny should refactoring come into play. We must understand the base form before adopting its analogs.