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 -- http://mail.python.org/mailman/listinfo/python-list