[Tutor] slicing a string
Steven D'Aprano
steve at pearwood.info
Tue Sep 7 00:47:16 CEST 2010
On Tue, 7 Sep 2010 08:14:59 am lists wrote:
> Hi guys,
>
> Continuing my Python learning, I came across an exercise which asks
> me to take a string and reverse it.
>
> I understand that there is a function to do this i.e mytext.reverse()
You understand wrong :)
There is a function reversed() which takes any iterable object (a list,
a string, a tuple, a set, ...) and returns an iterator that yields the
items in reverse order:
>>> reversed("test")
<reversed object at 0xb7e8834c>
but that's not useful in this case.
> I imagine that the exercise author would rather I did this the hard
> way however. ;-)
>
> Assuming that mytext is "test", I've found that mytext[-1:-4:-1]
> doesn't work (as I expected it to) but that mytext[::-1] does.
>
> While that's fine, I just wondered why mytext[-1:-4:-1] doesn't work?
Remember that slice indexes fall *between* characters:
A slice of [-1:-4:-1] is equivalent to [3:0:-1].
>>> 'Test'[-1:-4:-1]
'tse'
>>> 'Test'[3:0:-1]
'tse'
So, what does this slice do? The slice indexes are equivalent to:
range(3, 0, -1)
=> [3, 2, 1]
Remember that the end position is excluded! Hence you reverse all the
characters in the string *except* the first.
--
Steven D'Aprano
More information about the Tutor
mailing list