Misuse of list comprehensions?

Diez B. Roggisch deets at nospam.web.de
Tue May 20 09:34:16 EDT 2008


John Salerno wrote:

> I posted this code last night in response to another thread, and after I
> posted it I got to wondering if I had misused the list comprehension.
> Here's the two examples:
> 
> Example 1:
> --------------------
> def compress(s):
>     new = []
> 
>     for c in s:
>         if c not in new:
>             new.append(c)
>     return ''.join(new)
> ----------------------
> 
> Example 2:
> ------------------------
> def compress(s):
>     new = []
>     [new.append(c) for c in s if c not in new]
>     return ''.join(new)
> --------------------------
> 
> In example 1, the intention to make an in-place change is explicit, and
> it's being used as everyone expects it to be used. In example 2, however,
> I began to think this might be an abuse of list comprehensions, because
> I'm not assigning the result to anything (nor am I even using the result
> in any way).
> What does everyone think about this? Should list comprehensions be used
> this way, or should they only be used to actually create a new list that
> will then be assigned to a variable/returned/etc.?

the above code is pretty much of a no-no because it has quadratic runtime
behavior.

That being said, I use that idiom myself.  But I don't see anything wrong
with using a list-comp as loop-abbreviation. because that is it's actual
purpose. And also it is common in non-functional languages that l-values
aren't always assigned, if the aren't needed. It's the consequence of
having side-effects in a language - and python has them.

Diez





More information about the Python-list mailing list