[EMAIL PROTECTED] wrote:
Many people I know ask why Python does slicing the way it does.....

Can anyone /please/ give me a good defense/justification???

I'm referring to why mystring[:4] gives me
elements 0, 1, 2 and 3 but *NOT* mystring[4] (5th element).

Many people don't like idea that 5th element is not invited.

(BTW, yes I'm aware of the explanation where slicing
is shown to involve slices _between_ elements.  This
doesn't explain why this is *best* way to do it.)

Chris


Hi Chris,

What I've found is foreword slicing with positive stepping is very convenient for a lot of things. :-)

But when you start trying to use reverse steps, it can get tricky.

There are actually 4 different ways to slice and dice. So we have a pretty good choice. So the trick is to match the slice method to what you need, and also use the correct index's for that method.


Where s = 'abcd' With s[i,j]

Foreword slices index, forward steps
    a,  b,  c,  d
i=  0,  1,  2,  3
j=  1,  2,  3,  4

s[0,4] = 'abcd'
s[1,3] = 'bc'

Foreword slice index (-steps)
    a,  b,  c,  d
i=  0,  1,  2,  3
j= -5, -4, -3, -2

s[3,-5] = 'dcba'
s[2,-4] = 'cb'

Reverse slice index (+steps)
    a,  b,  c,  d
i= -4, -3, -2, -1
j=  1,  2,  3,  4

s[-4,4] = 'abcd'
s[-3,3] = 'bc'

Reverse slice index (-steps)
    a,  b,  c,  d
i= -4, -3, -2, -1
j= -5, -4, -3, -2

s[-1,-5] = 'dcba'
s[-2,-4] = 'cb'


(Maybe this could be made a little more symetrical for Python 3000?)

Cheers,
Ron_Adam
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to