[Tutor] sort problem

Greg gregbair at gmail.com
Wed Sep 8 18:38:03 CEST 2010


On Wed, Sep 8, 2010 at 11:50 AM, Roelof Wobben <rwobben at hotmail.com> wrote:

>
>
> > Subject: Re: [Tutor] sort problem
> > From: evert.rol at gmail.com
> > Date: Wed, 8 Sep 2010 17:26:58 +0200
> > CC: tutor at python.org
> > To: rwobben at hotmail.com
>
> >
> > > I have this :
> > >
> > > def sort_sequence(seq):
> > > """
> > > >>> sort_sequence([3, 4, 6, 7, 8, 2])
> > > [2, 3, 4, 6, 7, 8]
> > > >>> sort_sequence((3, 4, 6, 7, 8, 2))
> > > (2, 3, 4, 6, 7, 8)
> > > >>> sort_sequence("nothappy")
> > > 'ahnoppty'
> > > """
> > > if type(seq) == type([]):
> > > seq.sort()
> > > elif type(seq)== type(()):
> > > seq = tuple(sorted(seq))
> > > else:
> > > seq2 = list(seq)
> > > seq2.sort()
> > > print seq2
> > > seq.join(seq2)
> > > return seq
> > >
> > > The problem is that if I want to sort the characters in a string, the
> list exist of the sorted characters but as soon as I convert them to a
> string I get the old string.
> >
> > Carefully read the documentation for str.join:
> http://docs.python.org/library/stdtypes.html#str.join
> >
> > How does it work, what does it return, etc. Then fix the corresponding
> line in your code.
> > As a hint: str.join does work quite different than list.sort; I assume
> you're confusing their syntaxes.
> >
> > Good luck,
> >
> > Evert
> >
>
> str.join(*iterable*)¶ <#12af20c2e150d2eb_str.join>
> How it works.
> It puts all the elements of iterable into one string named str.
>
> So it returns a string.
>
> Str is here seq  and the iterable is the list made by list.sort so seq2
>
> So I don't see the error in that line.
>
>
> Roelof
>
>

The error is that you misunderstand the usage of str.join.  It doesn't do it
in place, i.e. it doesn't change the actual string, so you have to have a
variable to capture the response.

The biggest thing, though, is that in str.join, str is not the string to
store the joined iterator in, it's the separator for the string.  so, in
your case, where you have

seq.join(seq2)

You really want

seq = "".join(seq2)

where "" is the separator to join seq2 on (an empty string in this case)

HTH.

-- 
Greg Bair
gregbair at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100908/526db5f3/attachment.html>


More information about the Tutor mailing list