How Python works: What do you know about support for negative indices?
tjreedy at udel.edu
Fri Sep 10 23:13:55 CEST 2010
On 9/9/2010 9:37 PM, Raymond Hettinger wrote:
> The docs guarantee that Python's builtin sequences implement support
> for negative indices (
The relevant paragraphs are
For built-in objects, there are two types of objects that support
If the primary is a mapping, the expression list must evaluate to an
object whose value is one of the keys of the mapping, and the
subscription selects the value in the mapping that corresponds to that
key. (The expression list is a tuple except if it has exactly one item.)
If the primary is a sequence, the expression (list) must evaluate to an
integer. If this value is negative, the length of the sequence is added
to it (so that, e.g., x[-1] selects the last item of x.) The resulting
value must be a nonnegative integer less than the number of items in the
sequence, and the subscription selects the item whose index is that
value (counting from zero).
Reading the third paragraph out of context, one can miss the restriction
to built-in objects. I had assumed that the conversion using len(), when
available, happened prior to the __getitem__ call. I believe I need to
add the restriction in my discussion of negative indexing in my book. I
would like the above rewritten something like the following:
Two types of built-in objects support subscription as primaries:
mappings and sequences.
For built-in mappings, the....
For built-in sequences, the ...
The second paragraph was written before defaultdict and does not apply
to them. I presume that it is an extension rather than built-in class
for the purpose of the Reference.
> Hope you all found this to be informative,
Definitely. I save a copy for future reference.
Terry Jan Reedy
More information about the Python-list