I've been diving into Python to really understand it, and I came across something confusing. I have a list called `nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]`. When I try to slice it without any step, like `nums[1:-1]`, it works fine and gives me `[1, 2, 3, 4, 5, 6, 7, 8]`. Using a positive step, `nums[1:-1:2]`, also works, returning `[0, 2, 4, 6, 8]`. However, when I try using a negative step like `nums[1:-1:-2]`, I get an empty list `[]`. I can get the reversed order using just `nums[::-2]`, which gives `[9, 7, 5, 3, 1]`. The only way I found to slice with a negative step involves chaining, like `nums[1:-1][::-2]`, which returns `[8, 6, 4, 2]`. Why does `nums[1:-1:-2]` not return anything?
4 Answers
Python has its quirks, that's true! But slicing like this isn't something I've ever considered doing in my 10 years of coding. Just remember that for positive steps, start needs to be less than stop, while for negative steps, start must be greater.
That's a good way to look at it. The start and stop rules make sense once you break it down. Don't worry, it happens to all of us!
This isn't really an inconsistency; it just requires a little understanding. With a negative step, you need to have your start index higher than the stop index. So when you say `nums[1:-1:-2]`, you're telling Python to start at index 1 and go backwards, but since you're telling it to stop before -1, it can't return anything because it exhausts the list before iterating over it.
You need to remember the order of slicing components: *start*, *stop*, and *step*. When using a negative *step*, the *start* index must be greater than the *stop* index. So, `nums[1:-1:-2]` doesn't work because you're starting at an index (1) that's lower than the stop index (-1). Instead, try `nums[-1:1:-2]` to get elements in reverse.
Oh, thanks! That makes total sense. I knew the starting index should be smaller than the ending index, but I didn’t realize with a negative step that they swap positions.

Totally get it now! I was mixing up the positions when using negative steps.