s[7:9]returns a 2-item sequence of elements 7 and 8. This works pretty much like any other half-open interval, in which one side (the 7) is included and the other (the 9) excluded. The resulting length is simply the difference between the end and start indexes, 9-7=2.
What about backward? If you reverse the numbers and add a stride value,
s[9:7:-1]gives you elements 9 and 8. Since the interval is still half-open, now 9 is on the closed end and included, and 7 is open and excluded. So
s[8:6:-1]is the reverse of
s[7:9]. You're getting two elements, starting at 8 and ending before 6, going backwards.
What happens if you want to get the reverse of
s[0:5]? The above math would suggest
s[4:-1:-1]but negative indexes are way at the other end of the sequence, so this produces an empty result. The correct answer is actually omitting the end index, as in
s[4::-1]. That invokes the regular "all items remaining in sequence" meaning, that is also used in