Misleading description of [i:j:k] slicing?

Raoul Gough RaoulGough at yahoo.co.uk
Thu Aug 21 17:49:16 CEST 2003

As of Python 2.3, Section 2.2.6 (Sequence Types) describes slices
which have a specified step (to omit some indexes in beteween), using
the notation s[i:j:k]. The note about how this works says:

  "The slice of s from i to j with step k is defined as the sequence
  of items with index x = i + n*k such that 0 <= n < abs(i-j). [...]"

Seems to me that "0 <= n < abs(i-j)" is wrong, since the range of n
gets multiplied by k. I would suggest that it should be something

"x = i + n, such that n is a multiple of k and 0 <= n < abs(i-j)"

or maybe better

"x = i + n*k, 0 <= n < ((j-i) / k)"

(Requiring j>i for positive k and j<i for negative k). I've tested the
implementation as follows:

>>> x=[0,1,2,3,4,5,6,7,8,9]
>>> print x[0:5:2]
[0, 2, 4]     # Would print [0, 2, 4, 6, 8] according to doc?
>>> print x[2:5:-2]
[]            # Would print [2, 0, 8] according to doc??

I was going to submit a bug, but then I realised that I might just be
mis-interpreting what the documentation says (or maybe it'd not even
supposed to be so precise a specification). Any comments or
confirmation on this?

Raoul Gough
"Let there be one measure for wine throughout our kingdom, and one
measure for ale, and one measure for corn" - Magna Carta

More information about the Python-list mailing list