Misuse of list comprehensions?

Simon Forman sajmikins at gmail.com
Wed May 21 13:11:09 EDT 2008


On May 21, 4:36 am, Bruno Desthuilliers <bruno.
42.desthuilli... at websiteburo.invalid> wrote:
> Simon Forman a écrit :
>
>
>
> > On May 20, 8:58 am, Paul McGuire <pt... at austin.rr.com> wrote:
> >> On May 20, 10:50 am, s0s... at gmail.com wrote:
>
> >>> You don't need all those conditionals. A set differs from a list
> >>> precisely in the fact that each element is unique. And since the
> >>> function is expecting "s" to be an iterable object, it can be
> >>> constructed even without a for loop:
> >>> def compress(s):
> >>>     return list(set(s))
> >>> That does the trick.
> >> Only if order does not need to be maintained.  list(set(s)) will not
> >> necessarily keep the unique characters in the order they are seen.
> >> We'll have to check with the OP to see if this is important (I just
> >> assumed that it was because of the use of list comps).
>
> >> -- Paul
>
> > If order is important, you can use sorted() instead of list() like so:
>
> > def compress(s):
> >     new = sorted(set(s), key=s.index)
> >     return return ''.join(new)
>
> This won't still preserve the *original* order.


I don't understand.

new will contain each unique item in s, sorted in order of the items'
first occurance in s, right?
There are other ways to do it (other functions that could be passed to
sorted() as the key arg) of course, but this seems like a good value
of "original order", no? :)

Regards,
~S



More information about the Python-list mailing list