Gary, thanks for lots of info! Python strings are not lists! I got it now. That's a pity, I need two different functions: one to reverse a list and one to reverse a string:
def reverseList(xs): if xs == []: return xs else: return (reverseList (xs[1:])) + [xs[0]] def reverseStr(str): if str == "": return str else: return (reverseStr (str[1:])) + str[0] Ok. Now regarding in-place reversal of a list: >>> l = [1,2,3] >>> l [1, 2, 3] >>> l.reverse() >>> l [3, 2, 1] That was, as I expected. Good. Then why this ? : >>> ls = [1,2,3].reverse() >>> ls >>> >>> print [1,2,3].reverse() None >>> I mean, why ls is empty after assignment? Also, I couldn't find in the Python docs what this form of slicing means: xs[::-1] ? It works for creating a reversed copy of either a string or a list, but what does '::-1' syntax means? Thanks, Dmitri O. Kondratiev [EMAIL PROTECTED] http://www.geocities.com/dkondr On 10/15/07, Gary Herron <[EMAIL PROTECTED]> wrote: > > Dmitri O.Kondratiev wrote: > > > > The function I wrote (below) reverses lists all right: > > > > def reverse(xs): > > if xs == []: > > return [] > > else: > > return (reverse (xs[1:])) + [xs[0]] > > > > > > >>> reverse ([1,2,3]) > > [3, 2, 1] > > >>> > > > > > > Yet when I try to reverse a string I get: > > > > >>> reverse ("abc") > > > > ... > > ... > > ... > > > > File "C:\wks\python-wks\reverse.py", line 5, in reverse > > > > return (reverse (xs[1:])) + [xs[0]] > > > > File "C:\wks\python-wks\reverse.py", line 5, in reverse > > > > return (reverse (xs[1:])) + [xs[0]] > > > > File "C:\wks\python-wks\reverse.py", line 2, in reverse > > > > if xs == []: > > > > RuntimeError: maximum recursion depth exceeded in cmp > > > > >>> > > > > What's wrong? Why recursion never stops? > > > If you are doing this as an python-learning exercise, then read on. If > you are doing this reversal for real code, then try: > > xs.reverse() for in-place reversal of a list (but not a string), or > result = xs[::-1] for creating a reversed copy of either a string or a > list > > > Your recursion stops when xs == [], but when you're stripping characters > off a string, like 'abc', the remaining portion will be 'bc', then 'c', > than '', but never [] so you 'll never stop. > > Try: > > if xs == []: > return [] > elif xs == '': > return '' > else: > ... > > > Gary Herron > > > > > > Thanks, > > Dima > >
-- http://mail.python.org/mailman/listinfo/python-list