Differences between revisions 1 and 2
Revision 1 as of 2011-12-15 19:04:52
Size: 757
Editor: KellerScholl
Comment:
Revision 2 as of 2011-12-15 20:28:46
Size: 1123
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
{{{
Line 17: Line 18:
}}}
Line 21: Line 23:


.... SkipMontanaro writes ....

I believe slicing with negative indices works as expected:

{{{

>>> x = range(10)
>>> x[-9:9]
[1, 2, 3, 4, 5, 6, 7, 8]
}}}

You just need to remember that a negative index means offset from the end while a positive index means offset from the start. Thus above, {{{-9}}} references offset {{{10-9 == 1}}}.

How slice works:

>>> a = list(range(10))
>>> a[1:3]
[1, 2]
>>> a[1:-1]
[1, 2, 3, 4, 5, 6, 7, 8]

How slice works with negative numbers when nice:
>>> a[-5:-2]
[5, 6, 7]
>>> a[2:-4]
[2, 3, 4, 5]

How slice fails with negative numbers
>>> a[-5:2]
[]

In fact, any attempt to slice from a negative to a positive returns nothing. My expectation as a user is that it would move through the list, going over if need be. It would go from 8 to 9 to 0 to 1 to 2.

It isn't a problem that you run into very often. However, it counters user expectations and doesn't seem to provide a significant benefit. It probably wouldn't work as well in Python 4000 when lists start at 1, but for Python 3.4 or 3.5 it could make things simpler to understand.

.... SkipMontanaro writes ....

I believe slicing with negative indices works as expected:

>>> x = range(10)
>>> x[-9:9]
[1, 2, 3, 4, 5, 6, 7, 8]

You just need to remember that a negative index means offset from the end while a positive index means offset from the start. Thus above, -9 references offset 10-9 == 1.

SliceOverNegatives (last edited 2011-12-15 20:28:46 by SkipMontanaro)

Unable to edit the page? See the FrontPage for instructions.