Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: Newbi Q: Recursively reverse lists but NOT strings?

Reply
Thread Tools

Re: Newbi Q: Recursively reverse lists but NOT strings?

 
 
Kurt Smith
Guest
Posts: n/a
 
      10-15-2007
On 10/15/07, Gary Herron <> wrote:
> Dmitri O.Kondratiev wrote:
> > 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:

> True, they are not both lists, but they *are* both sequences, with some
> things in common. In particular xs[::-1] will reverse both types of
> objects. And even if you roll you own reversal function, you don't need
> two. One will do.
>
> Gary Herron
>
> >
> > 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?


mylist[::-1] is interpreted as mylist[slice(None,None,-1)], and the
slice object has a method, 'indices' that computes the right endpoints
for what you want to do.

So:

>>> myseq = (1,2,3)
>>> myseq[::-1]

(3, 2, 1)
>>> myseq[slice(None,None,-1)]

(3, 2, 1)
>>> myseq[None:None:-1]

(3, 2, 1)

etc.



> >
> > Thanks,
> >
> > Dmitri O. Kondratiev
> > <private.php?do=newpm&u=>
> > http://www.geocities.com/dkondr
> >
> > On 10/15/07, *Gary Herron* <
> > <private.php?do=newpm&u=>> 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
>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Newbi Q: Recursively reverse lists but NOT strings? Victor B. Gonzalez Python 5 10-17-2007 12:19 PM
Re: Newbi Q: Recursively reverse lists but NOT strings? paul Python 6 10-16-2007 10:29 PM
Re: Newbi Q: What is a rational for strings not being lists in Python? Matt McCredie Python 4 10-16-2007 01:15 PM
Newbi converting home video Rene DVD Video 1 06-23-2005 08:00 PM
Newbi q: show prog Christoffer T Python 9 11-28-2003 03:44 AM



Advertisments