A suggestion for a possible Python module
aleax at aleax.it
Tue Mar 4 09:47:15 CET 2003
Erik Max Francis wrote:
> Lance LaDamage wrote:
>> I have noticed that there is one thing that everyone wishes to do in
>> ... 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:
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*
>> 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)
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]
More information about the Python-list