Misleading description of [i:j:k] slicing?
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:
>>> 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?
"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