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

Discussion in 'Python' started by Raoul Gough, Aug 21, 2003.

  1. Raoul Gough

    Raoul Gough Guest

    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
    like:

    "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
     
    Raoul Gough, Aug 21, 2003
    #1
    1. Advertising

  2. Raoul Gough <> writes:

    > 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.


    How about "0 <= n < abs(k*(i-j))"? But you're right, what's there is
    a bit wrong. It's surprisingly hard to get this written down well.
    The idea's not that hard, but a terse explanation is surprisingly
    hard (when you start omitting values it gets even more fun!).

    Please submit a patch (assign it to me if you like -- the above
    passage is my fault).

    Cheers,
    mwh


    --
    This same programmer had worked for the military, and therefore had
    access to weapons-grade cursing technology.
    -- Matt Roberds, asr
     
    Michael Hudson, Aug 21, 2003
    #2
    1. Advertising

  3. On Thu, 21 Aug 2003 17:12:28 GMT, rumours say that Michael Hudson
    <> might have written:

    >> "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). [...]"


    Basically, it's 0 <= n < abs(i-j)//k, right?
    --
    TZOTZIOY, I speak England very best,
    Microsoft Security Alert: the Matrix began as open source.
     
    Christos TZOTZIOY Georgiou, Aug 21, 2003
    #3
  4. Raoul Gough

    Raoul Gough Guest

    Christos "TZOTZIOY" Georgiou <> writes:

    > On Thu, 21 Aug 2003 17:12:28 GMT, rumours say that Michael Hudson
    > <> might have written:
    >
    >>> "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). [...]"

    >
    > Basically, it's 0 <= n < abs(i-j)//k, right?


    I didn't know about // (silly me) but it looks like a good way to
    go. Your alternative formulation still doesn't give the right
    behaviour for negative values of k. e.g.

    s[4:0:-1]. i.e. i=4, j=0, k=-1 so 0 <= n < -4 ??

    or, indeed, for positive k and j<i (should return an empty sequence).

    --
    Raoul Gough
    "Let there be one measure for wine throughout our kingdom, and one
    measure for ale, and one measure for corn" - Magna Carta
     
    Raoul Gough, Aug 21, 2003
    #4
  5. Raoul Gough

    Raoul Gough Guest

    Michael Hudson <> writes:

    > Raoul Gough <> writes:
    >> Seems to me that "0 <= n < abs(i-j)" is wrong, since the range of n
    >> gets multiplied by k.

    >
    > How about "0 <= n < abs(k*(i-j))"? But you're right, what's there is
    > a bit wrong. It's surprisingly hard to get this written down well.
    > The idea's not that hard, but a terse explanation is surprisingly
    > hard (when you start omitting values it gets even more fun!).
    >
    > Please submit a patch (assign it to me if you like -- the above
    > passage is my fault).


    I've submitted a bug to the sourceforge tracker for Python, but
    couldn't see how to assign it to anyone. Bug number is 792656, hope
    this is what you meant.

    --
    Raoul Gough
    "Let there be one measure for wine throughout our kingdom, and one
    measure for ale, and one measure for corn" - Magna Carta
     
    Raoul Gough, Aug 21, 2003
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. j
    Replies:
    5
    Views:
    425
    Samuel Barber
    Jul 27, 2003
  2. Brian Kelley

    Misleading Python error message

    Brian Kelley, Nov 19, 2003, in forum: Python
    Replies:
    4
    Views:
    379
    Dennis Lee Bieber
    Nov 21, 2003
  3. Juho Schultz
    Replies:
    2
    Views:
    307
    Alex Martelli
    Jan 26, 2006
  4. misleading prefix ++

    , May 20, 2006, in forum: Python
    Replies:
    6
    Views:
    388
    Carl Friedrich Bolz
    May 21, 2006
  5. Claudio Grondi
    Replies:
    8
    Views:
    810
    Georg Brandl
    Aug 28, 2006
Loading...

Share This Page