Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

But shouldn't it be [-0] to get the last element if [0] denotes the first element?


I think the most mathematically natural way to interpret negative indices is to threat them as numbers modulo list length. Then 0 = length, and -1 = length - 1.


C programmers can give you a couple of advises about "correct" modulo on negative numbers.


Negative indices have an implied ”len(list)” in front of them. They can be seen as an application of the idea of half-open intervals (0 <= i < len(list)), so it makes sense that they’re not symmetrical.


Is this sensible, or is it an unprincipled ad-hoc justification for a feature that happens to be useful?

Or another way: Is this more reasonable than, say, implicitly taking indices mod len(list)? How about implicitly flooring indices? If so, why?


I'm not sure on what principles you'd make a principled justification. My most common use of negative indices is for slicing the end of the list, in which context the interpretation similar to len(list) makes sense. E.g., list[:-2] does what you'd expect (the same as list[2:], except from the other end).

> implicitly taking indices mod len(list)?

Isn't this doing that (plus some bounds checking)? -1 mod 4 evaluates to 3.

> implicitly flooring indices?

Not sure I understand what this means.


[0] denotes an element with offset 0 from the start of the array. [-1] denotes an element with offset -1 from the start of the array.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: