A suggestion for a possible Python module
Alex Martelli
aleax at aleax.it
Tue Mar 4 03:47:15 EST 2003
Erik Max Francis wrote:
> Lance LaDamage wrote:
>
>> I have noticed that there is one thing that everyone wishes to do in
>> Python
>> ... reverse a string.
>
> Who's everyone? I can't remember needing desperately to reverse a
> string once in my entire programming life.
I have used reversing (on all sorts of sequences -- not jsut strings)
to perform in-place "subsequence shifts", a la Gries. Suppose a
sequence type X has a method x.reverse(from, onto) that in-place
reverses a subsequence of x; then, to go from x == A+B+C+D to
x == A+C+B+D form subsequences A, B, C and D of lengths a, b, c and
d respectively, entirely in-place, you can use:
x.reverse(a, a+b+c)
x.reverse(a, a+c)
x.reverse(a+c, a+c+b)
So, "in-place reverse subsequence" is a powerful primitive for all
kinds of "subsequence shifts". However, with Python strings being
immutable, such a primitive wouldn't be very useful -- you'd have
to build a new string anyway so you might as well do it in one go,
x = ''.join(( x[:a], x[a+b:a+b+c], x[a:a+b], x[a+b+c:] ))
or the like.
Still, I do think Gries' algorithm would be a good reason to add
optional start and stop arguments to Python lists' *reverse*
method. Hmmm...
>> As you know, in Visual Basic, the function for
>> performing this operation is indeed StrReverse(s).
>
> It's pretty trivial in Python as it is:
>
>>>> s = 'hello'
>>>> l = list(s)
>>>> l.reverse()
>>>> ''.join(l)
> 'olleh'
>
It's way simpler in Python 2.3, of course, since it finally supports
extended slicing for built-in sequences, including strings:
[alex at lancelot alex]$ python
Python 2.3a2 (#1, Feb 21 2003, 10:22:48)
[GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'reversed'[::-1]
desrever
>>>
Alex
More information about the Python-list
mailing list